根据内容闪烁单元格脚本 - 如何无限期地执行

时间:2017-06-06 11:16:47

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

您好我有以下代码:

function onEdit(e) {
  if (e.value == "Requested") {
    var number = 50; // Number of blink
    for (var i = 0; i <= number * 2; i++) {
      if (i % 2 == 0) {
        var color = "white";
      } else {
        var color = "red";
      }
      e.range.setBackground(color);
      SpreadsheetApp.flush();
      Utilities.sleep(1500); // Blink speed (ms)
    }
    e.range.setBackground("white") // Cell color is white after blinks were completed.
  }
}

然而由于某些原因,即使我将其设置为50,单元格也会闪烁不到10次左右。谷歌运行for循环时是否有时间限制?在我将单元格值更改为其他值之前,有没有办法让它无限期?

1 个答案:

答案 0 :(得分:0)

对Google服务进行如此多的调用将会计入您的每日配额。有关配额的更多信息,请https://developers.google.com/apps-script/guides/services/quotas

仅使用服务调用来获取非常重要的内容,例如获取和处理数据。找到另一个解决方案来突出显示已编辑的单元格。

由于延迟,你永远不会完全渲染闪烁,但你可以将等待时间缩短到50毫秒。看看下面的脚本。请注意,这是非常糟糕的做法,应该不惜一切代价避免。

   //junk code: not for use

    var i = 0;

    var isRunning = true;

    while(isRunning) {  

      if (i % 2 == 0) {
        var color = "white";
      } else {
        var color = "red";
      }

      i++;
      e.range.setBackground(color);
      SpreadsheetApp.flush();
      Utilities.sleep(30); // Blink speed (ms)
    }

尝试为多个单元格执行它。您会注意到脚本将在一段时间后停止执行。这是因为Google限制了总执行时间,并且不允许您的脚本连续运行。如果你去查看 - &gt;在脚本编辑器中执行脚本,你会看到类似这样的'执行失败:超过最长执行时间[总运行时间为32.548秒]。