【问题标题】:Send Email for New Row added using google script为使用 google 脚本添加的新行发送电子邮件
【发布时间】:2020-08-08 19:48:54
【问题描述】:

当我的谷歌表格中添加了新行时,我正在尝试发送电子邮件通知。我已经尝试了其他帖子中推荐的所有内容,但我无法让它发挥作用。当我执行我的脚本时,会为电子表格中的每一行发送一封电子邮件,并且邮件正文不包含该行中的信息。

它应该工作的方式如下:

在我的“问题”电子表格中,当我从下拉列表中选择“打开”时,第 34 列将自动填充“准备发送电子邮件”,而第 35 列(电子邮件发送列)将为空白。当我的“电子邮件”函数执行时,它将获取电子表格的范围并检查该新行的第 35 列是否设置为“准备发送电子邮件”并检查“电子邮件发送”列是否不等于“发送”。如果这是真的,那么它将发送电子邮件,并将该行标记为“已发送”。如果由于某种原因电子邮件未发送,则该行不应标记为“已发送”。

谁能解释为什么我每行都收到一封电子邮件,以及为什么电子邮件正文不包含我想要的信息。我看过其他帖子,但没有运气。这是我的脚本。

function email() 
{

  //setup function
  var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Issues");  
  var StartRow = 2; //first row of data to process
  var LastRow = ActiveSheet.getLastRow();
  var RowRange = LastRow - StartRow + 1;
  var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,35);
  var AllValues = WholeRange.getValues();
  var message = "";    
  for (var i=0;i<AllValues.length;i++) 
   
    {
      var CurrentRow = AllValues[i];
      var EmailSent = CurrentRow[34]; 
      if (CurrentRow[33] == "Ready to Email" && EmailSent!= "sent") 
      {
        message +=                      //set HTML template for information
          "<p><b>Issue Status: </b>" + CurrentRow[0] + "</p>" +
          "<p><b>Group: </b>" + CurrentRow[1] + "</p>" +
          "<p><b>LifeCycle Status: </b>" + CurrentRow[2] + "</p>" +  
          "<p><b>Issue Number: </b>" + CurrentRow[3] + "</p>" +
          "<p><b>Priority: </b>" + CurrentRow[4] + "</p>" +
          "<p><b>Opened By: </b>" + CurrentRow[10] + "</p>"; 
        var setRow = i + StartRow;
        var SendTo = "myemail@test.com";
        var Subject = "New Issue reported:  " + CurrentRow[3];    //set subject line   
        //send the actual email  
           MailApp.sendEmail
                  ({
                        to: SendTo,
                        cc: "",
                        subject: Subject,
                        htmlBody: message,
                  });
  
         ActiveSheet.getRange(setRow, 35).setValue("sent");  //update the row if email is sent
    }  
  }
}

这是我的电子邮件的样子。如您所见,我的电子邮件仅包含标签,不包含行中的值。

【问题讨论】:

  • 我无法重现您的问题。您的代码按我的预期工作。您确定您使用的是正确的索引吗?请记住,在您的电子表格中,您的列和行从索引 1 开始,即 col A = col 1 但在 javascript 数组中是从零开始的,因此 col 1 = [0]。在您的脚本中,CurrentRow[33] 实际上是工作表上的第 34 列(AH),“发送”应该在第 35 列或 AI 中。您还会遇到var message = ""; 在循环之外的问题,我相信这应该在循环内。如果您无法解决问题,请分享样本表。
  • @James D,非常感谢您的帮助。你的建议奏效了!!正如你所建议的,我添加了 var message = " ";进入循环并且它起作用了。

标签: javascript email google-apps-script google-sheets


【解决方案1】:

将其发布为 Stack 工作流程的答案。正如James D 所说,索引错误:

行和列从 1 开始索引,而不是 0。

所以在示例中应该是CurrentRow[34] 而不是CurrentRow[35],并且var message = ""; 应该在循环内。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2011-09-16
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多