(Google脚本)脚本检查 - 从电子表格中的所有新行中发送新的电子邮件



表单馈送到电子表格中(用于提高IT支持请求(,我希望它发送电子邮件并将该行标记为"已发送"。

脚本当前为每行发送一封电子邮件,无视它被标记为已发送的事实。

function sendEmail() 
{
   var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   var StartRow = 2;
   var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
   var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,7);
   var AllValues = WholeRange.getValues();
   var message = "";
   for (var i=0;i<AllValues.length;i++) 
   {
     var CurrentRow = AllValues[i];
     var EmailSent = CurrentRow[7];
     if (EmailSent != "sent")
     {
        message +=
            "<p><b>Timestamp: </b>" + CurrentRow[0] + "</p>" +
            "<p><b>E-mail: </b>" + CurrentRow[1] + "</p>" +
            "<p><b>Site: </b>" + CurrentRow[2] + "</p>" +  
            "<p><b>Summary: </b>" + CurrentRow[3] + "</p>" +
            "<p><b>Description: </b>" + CurrentRow[4] + "</p>" +
            "<p><b>Attachment: </b>" + CurrentRow[5] + "</p>";
        var setRow = i + StartRow;
        ActiveSheet.getRange(setRow, 7).setValue("sent");
        var SendTo = "itsupport@company.com";
        var Subject = "Support Request - ";
        var replyTo = CurrentRow[1];
       MailApp.sendEmail({to: SendTo,
                          replyTo: replyTo,
                          cc: "",
                          subject: Subject + " [" + CurrentRow[2] + "] " + CurrentRow[3],
                          htmlBody: message,});
    }
  }
}

当前,它为每行发送了一条电子邮件,将行标记为已发送(第7列(。这似乎是正确的,但是在下一次运行中,它将向相同行和任何未标记为已发送的新行发送电子邮件

问题:

您的if语句正在查看CurrentRow[7],这实际上是表8中的第8列,而不是您期望的第7列。


说明:

Google Apps脚本基于JavaScript。当我们进行range.getValues()时,返回一个值。数组是0索引的,这意味着引用数组的第一个对象,您将使用array[0]而不是array[1]

这是您的快速示例:

var array = ['Item One', 'Item Two', 'Item Three'];
console.log(array[0]);

您可以看到,当我们记录array[0]时,我们实际上获得了我们引用的数组的第一项。


解决方案:

修复代码所需要做的就是将您的var EmailSent指向正确的数组对象:

var EmailSent = CurrentRow[6];

参考:

  • JavaScript数组

您正在读取第8列的初始值,因为索引为0。

更改

var EmailSent = CurrentRow[7];

to

var EmailSent = CurrentRow[6];

最新更新