【问题标题】:Limit the frequency of calls to onEdit限制 onEdit 的调用频率
【发布时间】:2017-10-30 17:24:44
【问题描述】:

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

我写了以下内容:

function onEdit(e){

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

//It is an user edit!  

  UpdateOtherHiddenTables()

  }

};

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

【问题讨论】:

  • 您知道要触发UpdateOtherHiddenTables 的编辑单元格的范围吗?如果是这样,您可以比较 check_update_rangee.range,如果编辑的单元格在 check_update_range 内 - 运行 UpdateOtherHiddenTables()

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


【解决方案1】:

我会将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",这是真的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2011-01-21
    • 2011-03-15
    • 2014-11-02
    • 1970-01-01
    • 2019-02-06
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多