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