脚本在谷歌表单提交触发器上运行两次

时间:2015-02-11 07:56:29

标签: google-apps-script

我使用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++; 
   }
}

4 个答案:

答案 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...
}