【发布时间】:2020-06-15 11:57:06
【问题描述】:
我有下面的工作代码,它比较来自两个不同工作表的两组数据。一个是 395 个电话号码的列表,第二个是大约 135,000 行数据的列表。以下代码比较两者的相似性并将相似的行复制到第三张表。
虽然代码确实适用于小规模测试(1000 行和 395 个电话号码),但大约需要 10 分钟。但是,执行 135,000 行会使脚本超时。这是下面的脚本。
`function copyRowtoSheet3() {
var s1 = SpreadsheetApp.openById("1Aw11LiKzyezfrTQIuTsJPhUFtz8RPqLCc8FlIiy0ZlE").getSheetByName('Sheet1');
var s2 = SpreadsheetApp.openById("1Aw11LiKzyezfrTQIuTsJPhUFtz8RPqLCc8FlIiy0ZlE").getSheetByName('Sheet2');
var s3 = SpreadsheetApp.openById("1Aw11LiKzyezfrTQIuTsJPhUFtz8RPqLCc8FlIiy0ZlE").getSheetByName('Sheet3');
var values1 = s1.getDataRange().getValues();
var values2 = s2.getDataRange().getValues();
var resultArray = [];
for(var n=0; n < values1.length ; n++){
var keep = false;
for(var p=0; p < values2.length ; p++){
Logger.log(values1[n][0]+' =? '+values2[p][0]);
if( values1[n][1] == values2[p][0] ){
resultArray.push(values1[n]);
Logger.log('true');
//break ;
}
}
}
s3.getRange(+1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}`
我不是最擅长优化代码,如果有任何建议可以在这里输入,我会很高兴。我查看了最佳实践,并已尽我所能应用它们。对这里的代码有什么建议吗?
【问题讨论】:
-
大约 10 分钟 真的吗?对于 1000 行?执行超时为 6 分钟
-
据我了解,付费企业帐户的超时时间为 30 分钟。 6 分钟未付费。
-
虽然这是真的,但您的脚本不太可能只运行 10 分钟 1k 行
-
脚本在 10 分钟内运行小规模测试。但是,其他人提供帮助的脚本修改将时间缩短到 30 秒左右。干杯!
标签: javascript optimization google-apps-script google-sheets