触发器有时不起作用,我不明白为什么

问题描述

我需要你的帮助。

我有一个有效的谷歌表单供客户注册。 当我提交表单时,我有 3 个运行脚本的激活器,尤其是它们将意大利日期格式 (dd-mm-yyyy) 转换为美国 (yyyy-mm-dd)。

行动开始:提交表单后

我发现的问题是这个。 即使从控制面板中我发现这些脚本已正确执行而没有报告错误,这些脚本也并不总是有效。

代码示例:

function respondToFormSubmit() {
  var ss = SpreadsheetApp.openById("xxxxxxxxxxxxxxxxxxxxxxxx");
  var sheet = ss.getSheets()[0];


  // Format column I
  var column1 = sheet.getRange("F:F");
  var column2 = sheet.getRange("J:J");
  var column3 = sheet.getRange("K:K");
  var column4 = sheet.getRange("A:A");


  // Set new date format on column I
  column1.setNumberFormat('yyyy-mm-dd');
  column2.setNumberFormat('yyyy-mm-dd');
  column3.setNumberFormat('yyyy-mm-dd');
  column4.setNumberFormat('yyyy-mm-dd');

};

出现问题时,所有 3 个触发器都失败。 无法正常工作的发生率为 20/30%,这种不连续的“错误”并没有让我明白问题是什么。

你对我有什么建议吗? 非常感谢您的宝贵帮助。 毛罗

解决方法

您的脚本在触发器上运行的问题可能是传播 问题

将新的表单响应插入到 电子表格,因此您的数字格式功能可能会运行 在插入新行之前。

你可以做的一件事是在开始时实施一些等待时间 在函数中,例如和 sleep()

但是,如果您将脚本绑定到目标电子表格 而不是表单本身 - 您将能够使用 Google Sheets event objects 对于 sudo apt install libsqlite3-dev,其中包括 Form submit

示例用法:

range