脚本在onFormSubmit上运行多次

时间:2019-03-21 15:11:12

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

我将以下代码设置为基于onFormSubmit触发器运行,但有时在同一提交下它将运行多次。我想验证它是否已经复制了该行,如果要复制,则停止脚本。

function toDo(){
  var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var jobs = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Jobs");
  var lastrow = responses.getLastRow();
  var col = responses.getLastColumn();
  var row = responses.getRange(lastrow, 1, 1, 19).getValues();

  jobs.appendRow(row[0]);
  //copyValuesOnly(copyFromRange, copyToRangeStart);

  var si = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Jobs');

  var range = si.getRange("A2:R");

  range.sort({column: 5,ascending: true}),({column: 1, ascending:true});

}

3 个答案:

答案 0 :(得分:0)

这是GAS +表单的已知问题。解决该问题的方法是创建一个脚本锁,该脚本锁在一段时间内拒绝所有其他尝试(使它们尽早返回)。

operator==

我有脚本最多执行8次,通常每2-3秒执行一次。使用此解决方案,您可以在开始时进行锁定,然后在结束时进行睡眠,以确保处理时间大于等待时间。 (在这里我用了5秒,应该可以防止重复输入)。

答案 1 :(得分:0)

我已经注意到,如果您仅使用脚本制作工作表的另一个副本,该错误就会消失。似乎要重设原始副本中的问题。另外,请尝试停用Google表单上的回复收据。

答案 2 :(得分:-2)

我注意到如果我重命名 onFormSubmit 调用的函数并保存脚本,问题就解决了。

如果我在脚本编辑器中点击“运行”,每次提交表单我都会收到 2 封电子邮件。如果我再次单击“运行”,则每次提交表单都会收到 3 封电子邮件。如果我再次更改函数名称,我会重置为每个表单提交仅 1 封电子邮件。

不知何故,当我运行脚本时,它会复制触发器。