【问题标题】:Script to set formula every 25th row increasing date by 1 day每 25 行设置公式的脚本将日期增加 1 天
【发布时间】:2016-10-08 05:38:38
【问题描述】:

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

我之前在另一个工作表上成功使用的脚本,在我为这个新工作表调整后不起作用。我敢肯定这是我错过了一些简单的事情,买我的阅读障碍会让我很难看清什么。

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

=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

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个:

        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 &lt; 775; k = k + 25) 使其在 0.075 秒内运行。

    最后一件事:你不需要为你拥有的每一个函数创建一个单独的项目 :) 你可以将它们全部写在一个文件中,或者在一个项目中创建一堆新的 .gs 文件——它会以这种方式工作更方便。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 2018-11-01
      • 2018-09-05
      • 1970-01-01
      • 2022-07-02
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多