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

Google App script on form submit trigger - delay

我设置了一个脚本,用于发送一封关于从表单接收数据到电子表格的电子邮件。然而,自动电子邮件是从电子表格生成的,这需要几秒钟来更新字段 - 所以如果我使用 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});   
    }

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

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

为什么不用那个数组?您不必等待电子表格更新,也不必冒发送混淆回复的风险。

我假设您只发送已提交表单中的数据。如果您要发送基于以前提交的计算结果,那么这对您没有帮助。

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});   
}

或者类似的东西...

每当我创建链接到表单本身的脚本时,我都会遇到类似的挑战。当将脚本链接到响应电子表格时,我没有遇到这些问题。