【发布时间】: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