我使用sendFormByEmail函数创建Google表单和google应用程序脚本, 我也设置了此功能的表单提交触发器, 我的问题是这个脚本在表单提交上运行两次,我收到两封电子邮件, 我只想在表单提交上发送一封电子邮件。我的脚本代码如下。
var no_repeat=0;
function sendFormByEmail(e){
var email = "test@XXXXDXtest.com";
var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
var message = "";
var subject = "Success Assessment";
var total=0;
var roll_on=0;
message+="test massage";
message+="<table cellpadding='3' style='color: #0F1F4C;'>";
for(var i in headers) {
if(headers[i]=='Please enter your email address to receive your results'){
email=e.namedValues[headers[i]].toString();
}
if(headers[i]!='Please enter your email address to receive your results'){
if(headers[i]!='Timestamp'){
if(e.namedValues[headers[i]]!=''){
total = parseInt(e.namedValues[headers[i]])+parseInt(total);
}
message +="<tr >";
message += '<td >'+headers[i]+'</td><td >'+e.namedValues[headers[i]].toString()+ "</td>";
message +="</tr>";
roll_on++;
}
}
}
message +="<tr >";
message += "<td ><b> YOUR SCORE </b></td><td ><b>"+total+"</b></td>";
message+="</tr></table>";
// Send the email
if(email!='' && email!=null){
if(no_repeat==0){
MailApp.sendEmail(email, subject,"",{htmlBody: message});
}
no_repeat++;
}
}
答案 0 :(得分:2)
这是谷歌的known issue,他们正在努力修复:
我们的工程团队正在研究这个问题,但我们没有 估计何时修复。我建议申请 更新#22中显示的LockService逻辑,应该可以解决 问题
答案 1 :(得分:2)
我有同样的问题。问题是两个用户在Google表单上的提交触发器上设置了相同的内容。我作为其中一个用户登录并删除了触发器。我以其他用户身份登录,触发器仍在那里。现在完美运行,只运行一次。
答案 2 :(得分:0)
我在电子表格中遇到了同样的问题,显然这是开发人员试图解决的故障。
我有一个运行良好的类似电子表格,但是它是在管理触发器的页面上的最后更新之前开发的。
无论如何,作为一种解决方法,我在电子表格上创建了一个额外的列,以确保脚本仅对每行运行一次,添加两条代码行,第一行使用'OK'将值设置为新列,然后是否检查该列
希望有帮助!
Att。
答案 3 :(得分:0)
GAS小组尚未解决此问题。
花了数周的时间试图弄清脚本中出现的随机故障的根源之后,我们终于找到了这篇文章。非常令人沮丧!
我们发现对onSubmit进行简单的变量检查是一种有效的解决方法:
function handleSubmit() {
if (window.formSubmitted !== undefined) {
return false;
}
window.formSubmitted = true;
console.log("Should never fire twice!");
google.script.run...
}