2016-10-24 3 views
0

У меня есть диапазон, определенный строк 1-последняя строка, и я пытаюсь сделать следующее:Как перебирать столбцы для перетаскивания формул?

  1. Посмотрите на последнюю строку в каждом столбце (все они должны быть одинаковыми) и - если эта клетка empty - перетащите формулу из строки 1 до последней строки в этом столбце (например, если я нахожусь в столбце A, а моя последняя строка - строка 10, я буду оценивать, является ли A10 пустым, а если это так, я перетащить вниз формулу из A1 все вплоть до А10)
  2. Loop через колонку AM и повторить этот процесс

Я с трудом с этим, как я держу получение сообщения «ПОДГОТОВКА ДЛЯ ИСПОЛНЕНИЯ» во время отладки, и он никогда не запускается.

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

Есть причина, вы не можете использовать '= ARRAYFORMULA()', чтобы, в основном, имеют ваша формула автоматически заполнить до последней строки без необходимости сценария? –

+0

Это часть более крупного скрипта, где я на самом деле добавляю все больше строк в лист с течением времени. –

+0

'var getformula = copyformulacell.getFormulas();' assings array для getformula. setFormula требует строки, а не массива. –

ответ

0

Я УКАЗАЛ КОД И ТЕПЕРЬ РАБОТАЕТ. На будущее ЗДЕСЬ ЭТО ...

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; 
    } 
    } 
    } 
    } 
Смежные вопросы