谷歌表脚本,在 30 秒后超时

Joh*_*Doe 0 google-apps-script

我创建了一个 scrpit 来将从 Excel 复制的时间转换为正确的格式。
因为当我将 12.30、09.34、07.40 或 08.00 粘贴到 Google 表格中时,它们最终会变成 12.3、9.34、7.4 和 8。某些表事件包含时间格式,如 1230、934 或 740,因此我也必须解决该问题。这是我的代码。

function onEdit(event) {
  if (event.range.getColumn() == 3 ) {
    for(var i = 1; i<= range.getNumRows() ; i++){
      var r = range.getCell(i, 1);
      var rvalue = r.getValue();
      var rvalues = rvalue.toString();
      var rvalength = rvalues.length;
      if (rvalue != ""){
        if (rvalength == 3) {
          if (parseInt(rvalues.substring(0,2))>24) {
            r.setValue(rvalues.substring(0,1)+"."+rvalues.substring(1,3));
          }
          else
          {
            r.setValue(rvalues.substring(0,2)+"."+rvalues.substring(2,3));
          }
        }
        else if ( rvalength == 4 ) {
          r.setValue(rvalues.substring(0,2)+"."+rvalues.substring(2,4));
        }
        else if ( rvalength == 2 ) {
          r.setValue("."+rvalues);
        }
        r.setNumberFormat("00.00");
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当它是一个小表时它工作正常,但是当它变得像 200x500 表一样大时,代码就停止了。执行日志表示状态为“超时”,持续时间始终为 30-33 秒。
我听说 Google App Scripts 有 6 分钟的超时时间,所以我不知道为什么我的代码总是在大约 30 秒左右超时。

我不认为原因是因为我的代码,但我认为它也可以优化以获得更好的性能,我只是不知道如何。

Die*_*ego 5

简单的触发器,例如onEdit() 不能运行超过 30 秒。

您可以尝试将其转换为可安装的触发器,尽管这可能不会自动适用于其他人,除非他们首先授权该脚本。(要转换它,基本上重命名函数并按照这些说明...事件源应该是“电子表格”,事件类型应该是“编辑中”。)

或者,考虑到您需要清理的数据格式的可变性,您可能希望改为从自定义菜单调用该函数,而不是依赖于编辑触发器。您可以选择电子表格中的表格,然后在 返回的范围内执行您的函数Spreadsheet.getActiveRange()

关于优化......如果你做得对,并且你的脚本可以明显地优化,你可以使它运行得更快,并且在 30 秒的限制内。请查看最佳实践的批处理操作部分。从我在您的代码中看到的内容来看,您特别希望利用: