如果Google工作表中的某些单元格留空,我有一个删除行的脚本。我正在使用大约6000多行。脚本工作正常,但5分钟后崩溃。 Google的服务器只允许5分钟的运行时间。
我想躲避这个跑步时间上限。如何创建一个每4分钟运行一次脚本的循环?
这是我的代码:
function readRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if ((row[2] == 0 || row[2] == '') && (row[3] == 0 || row[3] == '')) {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
} else if ((row[3] == 0 || row[3] == '') && (row[4] == 0 || row[4] == '')) {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
};
答案 0 :(得分:0)
答案 1 :(得分:0)
最简单的方法是将其分解成更小的位。
你可以重复一个想法:你可以运行一个函数来处理1000行,这是安全的(尽管谷歌有时会超时)。
然后,使用user property服务,存储一个名为startingRow的变量,并将其设置为(1000 - rowsDeleted)。
var userProperties = PropertiesService.getUserProperties();
var startingRow = userProperties.getProperty("startingRow");
//run loop from startingRow to 1000
//then set new start row for next time function is run
startingRow = 1000 - rowsDeleted;
userProperties.setProperty("startingRow", startingRow);
在该行开始你的函数的第二次迭代并再运行1000次,直到你到达数据的末尾,其中你将startingRow重置为0.
我不会将触发器设置为相隔4分钟,使其至少为10,超时实际设置为6分钟。
答案 2 :(得分:0)
Google Spreadsheets允许您指定激活器。例如,您可以说每分钟,每5分钟运行一次功能等。
所以最简单的方法是使用控制单元并在函数启动时检查/更新该控制单元。如果该函数被中断,当它再次被触发时,您可以检测到“进行中”值并继续。