根据编辑的栏,将电子邮件发送到以前的谷歌表单提交

Send email to previous Google Form Submit depending on which column was edited

本文关键字:谷歌 表单提交 电子邮件 编辑      更新时间:2023-09-26

我的Google脚本有问题。它实际上是按原样工作的,但问题是,在提交表单并有人提交新表单后,第一个提交的表单将不再发送电子邮件,因为它正在寻找LastRow。我很难让它正常工作。。。有人能帮忙吗?

以黄色突出显示的栏,供应商填写后,右侧第5栏(绿色)也应填写"已发送",让用户知道已向创建表单的人发送了电子邮件。

这是一张表格图片,希望能有更好的想法http://i57.tinypic.com/34tej4w.png

function sendNotification() {
 var doc = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = doc.getSheets()[0];
 var startRow = sheet.getLastRow();
 var dataRange = sheet.getRange(startRow, 1, 1, 21) ;
 var data = dataRange.getValues();
 var row;
 for (i in data) {
 row = data[i];
 var EMAIL_SENT = 'Sent';
 var emailSent = row[19];     // Third column
  if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
   //Define Notification Details
  var subject = "Row 12 has been edited!";
  var body = 
          '<html><body><b><u>Product Check</u></b>'
           + '<br><b>Time: </b>'
           + row[0]
           + '<br><b>Email requested: </b>'
           + row[1]
           + '<br><b>Request date: </b>'
           + row[2]
           + '<br><b>ISBN: </b>'
           + row[4]
           + '<br><b>Product Title: </b>'
           + row[7]
           + '<br><b>Supplier Name: </b>'
           + row[8]
           + '<br><b>PO Number: </b>'
           + row[10]
           + '<br><b>Comments: </b>'
           + row[12]
           + '<br>View the spreadsheet here: <a     href="#"><b>Click here</b></a> </html></body>';
 if (row[13] != '' && row[0] != '' && row[18] == '') {
  var recipients = row[1];
  var subject = "Column 'N' was edited!";
  sheet.getRange(startRow, 19, 1, 1).setValue(EMAIL_SENT) && sheet.getRange(startRow, 19, 1, 1).setBackgroundColor("#00ff00");
  SpreadsheetApp.flush();
    MailApp.sendEmail({
    to: recipients,
    subject: subject,
    htmlBody: body}); 
 }

您描述的行为是正常的,并且您自己已经发现了起源。。。

不使用最后一行作为引用,只使用与行[19]对应的列中没有"EMAIL_SENT"的第一行,这一行将是正确的一行。

但在并发的情况下,只会处理一个请求,所以我建议您每隔几分钟使用一个定时器触发器来运行这段代码,以便在每种情况下都能处理所有提交。

另一种解决方案是使用onForm-Submit触发器,但从处理程序回调对象而不是工作表中获取值(e.namedValues,请参阅此处的文档),但这意味着代码中会有更多更改。在后一种情况下,每一份提交都将独立处理,即使是两份或两份以上的提交都在一起。