google-apps-script - 编译时间太长
问题描述
这是我的代码:
function dataValidation()
{
var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2019년 출결 정보");
var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("원생 정보");
var array = [];
for (var c = 0; c <= 1000; c++)
{
array[c] = [];
}
var count = 0;
var lastRow1;
var data1 = ss1.getRange("C:C").getValues();
for (var k = data1.length-1; k >= 0; k--)
{
if (data1[k][0] != null && data1[k][0] != '')
{
lastRow1 = k+1;
break;
}
}
var lastRow2;
var data2 = ss2.getRange("A:A").getValues();
for (var n = data2.length-1; n >=0; n--)
{
if (data2[n][0] != null && data2[n][0] != '')
{
lastRow2 = n+1;
break;
}
}
for (var i = 2; i <= lastRow1; i++)
{
for (var j = 2; j <= lastRow2; j++)
{
if (ss1.getRange(i, 3).getDisplayValue() == ss2.getRange(j, 1).getDisplayValue())
{
array[i-1][count] = ss2.getRange(j, 2).getDisplayValue();
count++;
}
}
var rule = SpreadsheetApp.newDataValidation().requireValueInList(array[i-1], true).setAllowInvalid(false).build();
ss1.getRange(i, 4).setDataValidation(rule);
count = 0;
}
}
我很担心,因为编译速度太长了……完全执行大约需要一分钟:(
执行提示建议从第 71 行更改:
for (var i = 2; i <= lastRow1; i++)
{
for (var j = 2; j <= lastRow2; j++)
{
if (ss1.getRange(i, 3).getDisplayValue() == ss2.getRange(j, 1).getDisplayValue())
{
array[i-1][count] = ss2.getRange(j, 2).getDisplayValue();
count++;
}
}
我个人认为这是因为嵌套循环,但我没有任何聪明的想法来替换这个循环,我对谷歌应用程序脚本也没有太多了解。我还能做些什么来减少编译时间?
解决方案
推荐阅读
- kubernetes - jx 命令删除与 helm 版本关联的 PV(持久卷)
- python - Pyspark 数据框使用默认值左连接
- javascript - 通过 REST API 获取 SharePoint 文档库中链接项后面的 URL
- json - 如何在 vue 中使用 axios 从 json 数据(api)中获取特定值
- cordova - iOS Cordova 应用程序中的沉浸式模式 - 如何?
- alamofire - SwiftUI 无法在设备上运行(Alamofire)
- javascript - 使用javascript从重定向url读取片段参数
- java - Java:输入数组的值
- java - 将 relativealyout 中的中心视图与 relativelayout 之外的另一个视图对齐
- pandas - 填充 DataFrame 中的缺失值