如何循环和脚本每4分钟运行一次

时间:2015-05-29 21:49:40

标签: javascript google-apps-script google-sheets

如果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++;
    }
  }
 };

3 个答案:

答案 0 :(得分:0)

我猜你正在寻找这样的东西:

setInterval(function, delay)

http://www.w3schools.com/jsref/met_win_setinterval.asp

答案 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分钟运行一次功能等。

所以最简单的方法是使用控制单元并在函数启动时检查/更新该控制单元。如果该函数被中断,当它再次被触发时,您可以检测到“进行中”值并继续。