2016-10-24 9 views
0

ich eine Reihe von Reihe 1-letzte Zeile definiert haben, und ich versuche, die folgendes zu tun:Wie durchläuft man Spalten, um Formeln nach unten zu ziehen?

  1. Blick auf die letzte Zeile in jeder Spalte und (sie alle gleich sein sollten) - wenn diese Zelle ist leer - ziehe die Formel von Zeile 1 bis zur letzten Zeile in dieser Spalte (wenn ich zum Beispiel in Spalte A bin und meine letzte Zeile in Zeile 10 ist, werde ich prüfen, ob A10 leer ist, und wenn es so ist, werde ich es tun ziehen Sie die Formel von A1 den ganzen Weg hinunter bis A10 nach unten)
  2. Schleife durch Spalten aM und wiederholen Sie diesen Vorgang

ich damit eine harte Zeit habe ich behalten Beim Debuggen wird eine Meldung "VORBEREITUNG FÜR AUSFÜHRUNG" angezeigt, die jedoch nie ausgeführt wird.

function dragformulas() { 

    var sh2=SpreadsheetApp 
     .getActiveSpreadsheet() 
     .getSheetByName("Inputs for Web App") 
    var lastrow = sh2.getLastRow(); 

    for (var j=0; j < 14 ; j+1) { 

    var emptyrange= sh2.getRange(lastrow, j+1, 1, 1); 

    if (emptyrange.isBlank()) { 

    var copyformulacell = sh2.getRange(1, j+1, 1, 1); 
    var dragrange= sh2.getRange(1, j+1, lastrow - 1, 1); 

    var getformula = copyformulacell.getFormulas(); 

    dragrange.setFormula(getformula); 

    } 
} 
} 
+0

Gibt es einen Grund, warum Sie nicht verwenden können, '= ARRAYFORMULA()' zu, im Grunde haben die Formel automatisch in die letzte Zeile, ohne die Notwendigkeit eines Skripts füllen? –

+0

Dies ist Teil eines größeren Skripts, in dem ich im Laufe der Zeit immer mehr Zeilen an das Blatt angehängt habe. –

+0

'var getformula = copyformulacell.getFormulas();' liefert ein Array, um eine Formel zu erhalten. setFormula benötigt eine Zeichenfolge und kein Array. –

Antwort

0

Ich vereinfachte den Code und jetzt funktioniert es. Für die Zukunft, HIER IST ES ...

function myFunction() { 

    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns"); 
    var lastrow = sh.getLastRow(); 
    var numrows = lastrow; 
    var lastcol = sh.getLastColumn(); 
    var numcols = lastcol; 
    var range = sh.getRange(1,1,numrows,numcols); 
    sh.setActiveRange(range); 

    return propagateFormulae(numrows, numcols, sh); 

} 

function propagateFormulae(rows, cols){ 

    for(var i=1;i<=cols;i++){ 
    for(var j=2;j<=rows;j++){ 
     var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns"); 
     if(sh.getRange(j,i).getValue().length == 0) 
     sh.getRange(j-1,i).copyTo(sh.getRange(j,i)); 
     else{ 
     j=rows; 
    } 
    } 
    } 
    } 
Verwandte Themen