javascript - Google Sheets 脚本优化 - 避免最长执行时间
问题描述
我正在运行一个脚本来删除 Google 表格中包含文本字符串的行。我的目标电子表格有 50k 行,我正在运行最大执行时间限制(每天 1 小时,每次运行 6 分钟)。我相信我的脚本可能很臃肿,我不知道如何优化它。
注意:我不是此代码的作者。
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('All Marketplaces Removed');
var r = s.getRange('B:B');
var v = r.getValues();
for(var i=v.length-1;i>=1;i--)
if(v[i][0].includes("amazon")) {
s.deleteRow(i+1);
}
};
解决方案
工作表操作比 javascript 慢得多,尤其是在大循环中。在这里看到一个类似的问题。
尝试这个:
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('All Marketplaces Removed');
var val = s.getDataRange().getValues();
var lr = s.getLastRow();
var lc = s.getLastColumn();
var res = [];
for (var i = 0; i < lr; i++){
var v = val[i][1];
if (v != 'amazon'){
res.push(val[i]);
}
}
s.getDataRange().clearContent();
s.getRange(1, 1, res.length, lc).setValues(res);
};
推荐阅读
- batch-file - 如何批量组合变量和文本字符串?
- c - 这是在 C 中进行标记指针的可移植方式吗?
- python - 使用变量名的嵌套字典项的 Django 模板语法
- json - Xamarin 形式。无法在列表中显示 json 对象
- json - 将数组转换为以 ID 作为索引的 JSON (MongoDB / Express)
- sql - 连接两个表,其中一些列合并,其他列必须为空
- javascript - jQuery - 重定向到从 URL 加载()内容后如何获取最终链接?
- c# - c#UserControl构造函数不会按预期抛出异常
- graph - 如何在 m 个节点之间生成 n 条边
- docker - 来自 Docker 容器的空响应