我在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]);
}
}
}
}
答案 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行数据。