提高许多纸张上的单元格复制操作的速度

时间:2018-06-17 08:25:59

标签: google-apps-script google-sheets

我在Google表格文件中写了一个非常慢的for循环。有18张纸,我必须将每个大于0的单元格复制到另一张纸上。

我的代码适用于我的任务,但速度非常慢。也许有人知道如何提高速度?

一些解释:

  • 我使用了if语句if(i == 2),因为一张表有2700行
  • if(total.getRange(16+i, 5).getValue() > 1)检查工作表是否有 大于零的单元格。它可以防止不测试空白纸张。

代码的缓慢部分:

for (var i = 1; i < 19; i++) {
  if (i == 2) {
    m = 2700;
  } else if (i !=  2) {
    m = 500
  }
  for (j = 9; j<m; j++) {
    if (total.getRange(16+i, 5).getValue() > 1) {
      var sheet =  SpreadsheetApp.setActiveSheet(formularz.getSheets()[i]);
      if (sheet.getRange(j, 8).getValue() > 0) {
        var KOD = sheet.getRange(j, 3).getValue();
        var il = sheet.getRange(j, 8).getValue();
        wysylka.appendRow([KOD,il]);
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您需要尽量减少对Apps Script API的调用,尤其是在循环内。在嵌套循环中更是如此。

Using batch operations section of the Best Practices documentation

中介绍了这一点

这是一个带注释的替代品,可最大限度地减少Apps Script API调用:

注意:我尝试重新设置自you didn't provide a minimal and complete example以来的电子表格。如果您想尝试使用此功能,请使用您的数据副本进行测试。

apt

如上所述,在我的测试中,我只填充了3个数据表(而不是17个)。我能够在1.034秒内处理~1000行数据。