表单馈送到电子表格中(用于提高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];