我将以下代码设置为基于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});
}
答案 0 :(得分:0)
这是GAS +表单的已知问题。解决该问题的方法是创建一个脚本锁,该脚本锁在一段时间内拒绝所有其他尝试(使它们尽早返回)。
operator==
我有脚本最多执行8次,通常每2-3秒执行一次。使用此解决方案,您可以在开始时进行锁定,然后在结束时进行睡眠,以确保处理时间大于等待时间。 (在这里我用了5秒,应该可以防止重复输入)。
答案 1 :(得分:0)
我已经注意到,如果您仅使用脚本制作工作表的另一个副本,该错误就会消失。似乎要重设原始副本中的问题。另外,请尝试停用Google表单上的回复收据。
答案 2 :(得分:-2)
我注意到如果我重命名 onFormSubmit 调用的函数并保存脚本,问题就解决了。
如果我在脚本编辑器中点击“运行”,每次提交表单我都会收到 2 封电子邮件。如果我再次单击“运行”,则每次提交表单都会收到 3 封电子邮件。如果我再次更改函数名称,我会重置为每个表单提交仅 1 封电子邮件。
不知何故,当我运行脚本时,它会复制触发器。