我正在使用谷歌电子表格。
我在 C 列中有参与者的电子邮件地址,在 O 列中有他们相应的状态。(状态将为"完成"或"打开"或"正在进行"或"空"(。
如果 O2 值已更新,那么我需要使用模板向 C2 中的地址发送电子邮件。如果单元格 O2 已更新,则电子邮件应仅发送到 C2。
我希望你能帮助我。
我尝试了这个脚本,但它每次都会发送到所有电子邮件。
希望你能帮助我。
谢谢
function StatusChange() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("R & A").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template for Email").getRange(1,1).getValue();
var quotaLeft = MailApp.getRemainingDailyQuota();
if((lr-1) > quotaLeft){
Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + (lr-1) + " emails. Emails were not sent.");
} else {
for (var i = 2;i<=lr;i++){
var currentEmail = ss.getRange(i, 3).getValue();
var currentSheetTitle = ss.getRange(i, 11).getValue();
var currentName = ss.getRange(i, 4).getValue();
var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";
MailApp.sendEmail(currentEmail, subjectLine, messageBody);
} // close for loop
} //close else statement
}
如果 O2 值已更新,那么我需要使用模板向 C2 中的地址发送电子邮件。如果单元格 O2 已更新,则电子邮件应仅发送到 C2。
这可以使用onEdit
可安装的触发器来实现,您需要通过转到触发器或运行 Google 提供的以下代码进行设置。
function createSpreadsheetEditTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('statusChange')
.forSpreadsheet(ss)
.onEdit()
.create();
}
通过执行此操作,您可以检查 O 列是否正在更新,然后根据该结果运行 if else
语句。我还清理了一些变量,这样您就不会不必要地执行多个SpreadsheetApp.getActiveSpreadsheet()
调用。
注意:您将无法手动运行以下脚本,它将在编辑工作表时自动运行。
function statusChange(e){
var sp = SpreadsheetApp.getActiveSpreadsheet();
var ss = sp.getSheetByName('R & A');
var row = e.range.getRow(); //get row # for edited range
var col = e.range.getColumn(); //get column # for edited range
if(col === 15){ //check if column O was updated
var templateText = sp.getSheetByName("Template for Email").getRange(1,1).getValue();
var quotaLeft = MailApp.getRemainingDailyQuota();
if(quotaLeft < 1){
Browser.msgBox("You have " + quotaLeft + " left and you're trying to send 1 email. Email was not sent.");
} else{
var currentEmail = ss.getRange(row, 3).getValue();
var currentSheetTitle = ss.getRange(row, 11).getValue();
var currentName = ss.getRange(row, 4).getValue();
var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";
MailApp.sendEmail(currentEmail, subjectLine, messageBody);
} //close else statement
} //close if statement
}
由于您尝试做的只是为已编辑的行发送电子邮件,因此您不需要脚本中的for
语句。您可以获取已编辑范围的行和列,并改为基于该行和列的脚本的其余部分。