【问题标题】:(Google Script) Script check - Send email for new from all new rows in a spreadsheet(Google 脚本)脚本检查 - 为电子表格中所有新行中的新行发送电子邮件
【发布时间】:2019-07-29 21:25:44
【问题描述】:

表格馈入电子表格(用于提出 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 语句中使用!== 而不是!=
  • 刚刚测试过它仍然会重新发送所有行,不管

标签: google-apps-script


【解决方案1】:

问题:

您的 if 语句正在查看 CurrentRow[7],这实际上是工作表中的第 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];

参考:

【讨论】:

    【解决方案2】:

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

    改变

    var EmailSent = CurrentRow[7];
    

    var EmailSent = CurrentRow[6];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2020-12-15
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2016-12-03
      相关资源
      最近更新 更多