表单上的Google App脚本提交触发器 - 延迟

时间:2015-04-09 15:27:52

标签: google-apps-script

我设置了一个脚本,用于发送有关从表单接收数据到电子表格的电子邮件。但是,自动电子邮件会从电子表格生成,这需要几秒钟来更新字段 - 因此,如果我使用onformsubmit触发器,则自动电子邮件的内容会错误地引用先前的提交。

有没有办法将自动电子邮件延迟几秒钟,让电子表格有时间在发送电子邮件之前生成正确的信息?

任何帮助表示赞赏!

尼克

以下是目前的代码:

    function EmailFormConfirmation() { 
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var sheet = ss.getSheetByName("Form responses");
      var email = sheet.getRange(2,9,1,1).getValue();  
      var message = "<HTML><BODY>"
         + "<P >Hi " 
         + sheet.getRange(4,9,1,1).getValue()
         + ","
         + "<P>You have received a new request, from <b>"
         + sheet.getRange(5,9,1,1).getValue()
         + "</b>.  "
         + sheet.getRange(8,9,1,1).getValue()
         + " asks:<i>"
         + "<br /><br />"
         + sheet.getRange(6,9,1,1).getValue()      
         + "</i><P>You can find your request on the log at number <b>"
         + sheet.getRange(10,9,1,1).getValue()
         + "</b>.  
         + "<br /><br />"
         + sheet.getRange(8,9,1,1).getValue()
         + "'s email address is:"
         + "<br /><br />"
         + sheet.getRange(9,9,1,1).getValue()   
         + "</HTML></BODY>";
        MailApp.sendEmail(email, "LMI Request", "", {htmlBody: message});   
    }

2 个答案:

答案 0 :(得分:2)

当表单提交触发您的函数时,它会将参数传递给该函数。该参数包含一个数组,其中包含用户提交给表单的值。

为什么不使用那个数组?您不必等待电子表格更新,或冒险发送混合响应。

我假设您只是从提交的表单中发送数据。如果您根据以前提交的内容发送计算,那么这对您没有帮助。

function EmailFormConfirmation(e) { 
    var email = e.values[1];

    var message = "<HTML><BODY>"
        + "<P >Hi " 
        + e.values[3]
        + ","
        + "<P>You have received a new request, from <b>"
        + e.values[4]
        + "</b>.  "
        + e.values[7]
        + " asks:<i>"
        + "<br /><br />"
        + e.values[5]    
        + "</i><P>You can find your request on the log at number <b>"
        + e.values[9]
        + "</b>.  
        + "<br /><br />"
        + e.values[7]
        + "'s email address is:"
        + "<br /><br />"
        + e.values[8]
        + "</HTML></BODY>";

    MailApp.sendEmail(email, "LMI Request", "", {htmlBody: message});   
}

或类似的......

答案 1 :(得分:1)

您可以使用Utilities.sleep()函数使代码等待,以便电子表格有时间更新。这是文档https://developers.google.com/apps-script/reference/utilities/utilities#sleep(Integer)