我正在使用Google电子表格。
我在C列中有参与者的电子邮件地址,在O列中有其相应的状态(状态为DONE或OPEN或ONGOING或为空)。
如果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。
答案 0 :(得分:0)
这可以通过使用onEdit
可安装触发器来实现,您需要通过设置触发器或运行以下代码supplied by 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
语句。您可以获取已编辑范围的行和列,并以其余脚本为基础。