【发布时间】:2021-08-20 08:59:53
【问题描述】:
我有一个脚本需要改进。该脚本遍历列 A 上的所有行。然后,它根据值在下一个单元格中插入一个值。例如:如果单元格 A2 上的值为 4,9,那么它将在单元格 B2 中插入 UNDER10。有用。但是,它的工作速度很慢。如果我在 A 列上有数千行,有时脚本会超时。有谁知道让这个脚本更快的方法吗?
下面是我的脚本:
function myFunction() {
const ss = SpreadsheetApp.getActive().getActiveSheet()
const lastRow = ss.getLastRow();
for (var i = 1; i < lastRow +1; i++) {
var value = ss.getRange(i,1).getValue();
var newValue = ss.getRange(i,2);
if (value < 10) {
newValue.setValue("UNDER10");
} else if (value < 20) {
newValue.setValue("UNDER20");
} else if (value > 20) {
newValue.setValue("OVER20");
}
}
}
【问题讨论】:
-
避免在循环内的单个单元格中设置值。相反,写入一个数组,然后在一次调用中将该数组写回电子表格。 Also see this link。不确定为什么要使用脚本执行此操作?似乎这应该很容易用公式来实现......
-
谢谢我去看看。这是我需要定期运行的功能,这就是我需要脚本的原因。
-
您是否在此工作表中的其他内容中使用脚本?否则我使用 JPV,在工作表中使用带有嵌套 IF() 公式的 ArrayFormula 将完成同样的事情,并且需要更少的维护。应用脚本的缺点之一 - 除非您非常小心地设置命名范围和工作表,否则对工作表的任何更改都可能破坏您的功能。
-
是的,这必须通过脚本来完成,因为它会不断运行
标签: javascript google-apps-script google-sheets spreadsheet