脚本将每25行增加日期的公式设置为1天

时间:2016-10-06 21:00:37

标签: google-apps-script google-sheets

我需要每隔25行将一个公式设置为ColM,从M4开始。公式I设置需要每次将日期增加一天。

我以前在另一张纸上成功使用过的脚本,在我为这张新纸张改编后,它不起作用。我确信这是一件很简单的事,我已经错过了,买我的阅读障碍会让我很难看清楚。

我想设置这样的公式......

=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

1 个答案:

答案 0 :(得分: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文件 - 它& #39;以这种方式工作会更方便。

希望它有所帮助。