[英]Google Sheets Script to Auto Send Email when New Row Added
我是脚本新手,对代码不是很熟悉,所以我认为这个问题与 StartRow 和 LastRow 有关,但我不确定如何编辑它以按预期工作,一次只从一行中提取数据.
我有以下脚本,是从这个问题中得到的。 当列 H =“Y”且 I <>“Y”时,脚本发送 email。
我遇到的问题是我想要发送一个 email 来通知我每个新用户(1 个新用户 = 1 个新行)被添加到工作表,但很多时候一次添加多个用户/行,因为他们'通过数据连接器重新添加,将 Salesforce 数据连接到工作表,数据连接器每 24 小时刷新一次数据库。
每个单独的 email 都应该包含来自每个单独行的请求、帐户、约会和用户信息——这就是我想要的每个新行:
Request: TEST
Account: TEST
Appointment Created Date: Thu Oct 06 2022 00:00:00 GMT-0700 (Pacific Daylight Time)
User: TEST
但是,由于一次添加了多个新行,因此第一行的 email 看起来不错,但第二行的 email 将同时具有自己的行信息和第一行的信息 -这是我不想要的,但目前得到:
Request: TEST
Account: TEST
Appointment Created Date: Fri Oct 07 2022 00:00:00 GMT-0700 (Pacific Daylight Time)
User: TEST
Request: TEST
Account: TEST
Appointment Created Date: Thu Oct 06 2022 00:00:00 GMT-0700 (Pacific Daylight Time)
User: TEST
第 3 行的 email 将包含 email 主体中所有 3 行的信息。如何限制每个 email 仅包含与单个行相关的信息?
提前致谢!
function email()
{
//setup function
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("First Time Users");
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,9);
var AllValues = WholeRange.getValues();
var message = ""
for (var i=0;i<AllValues.length;i++)
{
var CurrentRow = AllValues[i];
var EmailSent = CurrentRow[8];
if (CurrentRow[7] == "Y" && EmailSent!= "Y")
{
message += //set HTML template for information
"<p><b>Request: </b>" + CurrentRow[0] + "</p>" +
"<p><b>Account: </b>" + CurrentRow[1] + "</p>" +
"<p><b>Appointment Created Date: </b>" + CurrentRow[4] + "</p>" +
"<p><b>User: </b>" + CurrentRow[5] + "</p>";
var setRow = i + StartRow;
var SendTo = "testemail@gmail.com";
var Subject = "First Time User Submitted Ask: " + CurrentRow[1]; //set subject line
//send the actual email
MailApp.sendEmail
({
to: SendTo,
cc: "",
subject: Subject,
htmlBody: message,
});
ActiveSheet.getRange(setRow, 9).setValue("Y"); //update the row if email is sent
}
}
}
var message = ""
在循环外部声明。 并且,该值是使用message +=
添加的。 在这种情况下, message
的值在每个循环中都会增长。 我认为这可能是您遇到问题的原因。setValue
时,处理成本变高。 参考为了避免这个问题,下面的修改怎么样?
function email() {
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("First Time Users");
var StartRow = 2;
var LastRow = ActiveSheet.getLastRow();
var RowRange = LastRow - StartRow + 1;
var WholeRange = ActiveSheet.getRange(StartRow, 1, RowRange, 9);
var AllValues = WholeRange.getValues();
var ranges = [];
for (var i = 0; i < AllValues.length; i++) {
var CurrentRow = AllValues[i];
var EmailSent = CurrentRow[8];
if (CurrentRow[7] == "Y" && EmailSent != "Y") {
var message =
"<p><b>Request: </b>" + CurrentRow[0] + "</p>" +
"<p><b>Account: </b>" + CurrentRow[1] + "</p>" +
"<p><b>Appointment Created Date: </b>" + CurrentRow[4] + "</p>" +
"<p><b>User: </b>" + CurrentRow[5] + "</p>";
var setRow = i + StartRow;
var SendTo = "testemail@gmail.com";
var Subject = "First Time User Submitted Ask: " + CurrentRow[1];
MailApp.sendEmail
({
to: SendTo,
cc: "",
subject: Subject,
htmlBody: message,
});
ranges.push("I" + setRow);
}
}
ActiveSheet.getRangeList(ranges).setValue("Y");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.