限制对onEdit的调用频率

时间:2017-10-30 17:24:45

标签: google-sheets google-docs google-sheets-api

我使用脚本编辑器编写了一些脚本来自动执行一些谷歌电子表格任务。 在用户与我的用户工作表交互后,我想做一些事情,.e.g更新一些以_开头的背景表。

我写了以下内容:

function onEdit(e){

  var range = e.range;
  if (e.source.getActiveSheet().getName()[0]!='_'){ 

//It is an user edit!  

  UpdateOtherHiddenTables()

  }

};

我的问题是UpdateOtherHiddenTables()需要相当长的时间,比如2分钟,并且它会在任何用户编辑时触发,因此它并不理想。 您如何确保在用户与工作表交互后调用UpdateOtherHiddenTables(),但不是经常?

1 个答案:

答案 0 :(得分:2)

我会将Script propertiestimed trigger结合使用。 on-Edit触发器仅记录电子表格已编辑的事实:

function recordEdit() {
  var sp = PropertiesService.getScriptProperties();
  sp.setProperty("edited", "yes");
}

此函数需要由installable trigger运行,简单的onEdit不会提供修改脚本属性所需的授权。

UpdateOtherHiddenTables功能设置为每10分钟,或每小时,或您想要的任何间隔运行。它会检查是否需要刷新。

function UpdateOtherHiddenTables() {
  var sp = PropertiesService.getScriptProperties();
  if (sp.getProperty("edited") == "yes") {
    // update stuff
    sp.setProperty("edited", "no");
  }
}

顺便说一句:onEdit仅由用户编辑触发。更改电子表格中的值的脚本不会触发该触发器。

我正在使用字符串值而不是布尔值,因为属性将所有内容字符串化。存储false会让你回到字符串"false",这很简单......