2016-10-06 16 views
0

我需要將公式設置爲ColM,每隔25行,從M4開始。我設定的公式需要每次將日期增加一天。將公式設置爲每25行增加1天的公式的腳本

我以前在其他工作表上成功使用過的腳本,在我爲這張新工作表調整後無法使用。我確定這是我錯過的簡單東西,購買我的閱讀障礙使得很難看到什麼。

我想設置這樣的公式...

=FILTER(ZapUPDATE!T2:Z, ZapUPDATE!Q2:Q=date(2016,10,1), ZapUPDATE!R2:R="SUP") // Into M4 
=FILTER(ZapUPDATE!T2:Z, ZapUPDATE!Q2:Q=date(2016,10,1)+1, ZapUPDATE!R2:R="SUP") // Into M29 
=FILTER(ZapUPDATE!T2:Z, ZapUPDATE!Q2:Q=date(2016,10,1)+2, ZapUPDATE!R2:R="SUP") // Into M54 

等,每25行到M754。這是腳本...

function setFormulas() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    for (var k = 0; k < 775; k++) { 
    sheet.getRange(4 + 25*k, 13).setFormula('=FILTER(ZapUPDATE!T2:Z, ZapUPDATE!Q2:Q=date(2016,10,1)+' + k + ', ZapUPDATE!R2:R="SUP")'); 
    } 
} 

鏈接到表單如下。感激地收到了任何幫助,謝謝。

Copy of sheet for Stack Overflow

回答

0

試試這個:

function setFormulas() { 
     var sheet = SpreadsheetApp.getActiveSpreadsheetSheet().getSheetByName('SUP10'); 
     var i = 0; 
     for (var k = 4; k < 775; k = k + 25) { 
     sheet.getRange(k, 13).setFormula('=FILTER(ZapUPDATE!T2:Z, ZapUPDATE!Q2:Q=date(2016,10,1)+' + i + ', ZapUPDATE!R2:R="SUP")'); 
     i++; 
     } 
    } 

如果你這樣做Logger.log(SpreadsheetApp.getActiveSheet().getName())你會看到GAS認爲另一片(AVL)主動 - 誰知道爲什麼,但在你的情況,我認爲,它可以很容易通過使用getSheetByName()克服。

另一件事是,通過每一個K值迭代,直到達到774實在是太慢了(它在電子表格中創建7K其他行) - 它運行的時間限制,仍然沒有完成循環。將環路設置更改爲(var k = 4; k < 775; k = k + 25)使其在0.075秒內運行。

最後一件事:你不需要爲每一個你需要的函數創建一個單獨的項目:)你可以將它們全部寫入一個文件中,或者在一個項目中創建一堆新的.gs文件 - 以這種方式工作會更方便。

希望它有幫助。