我目前正在尝试编写一个脚本,当编辑不同的列时,该脚本将向不同的人发送电子邮件。
例如,如果编辑了 A 列,则应将电子邮件发送至 [电子邮件受保护]。如果 B 列被编辑,应将电子邮件发送至 [email protected]
我编写了一个脚本,该脚本在向某人发送电子邮件时可以工作,但是当我尝试添加另一个触发事件时,该脚本将停止工作。
这是我到目前为止所拥有的:
function sendMailEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("REVIEW");
if (e.range.columnStart != 8) return;
const rData = e.source.getActiveSheet().getRange(e.range.rowStart,1,1,20).getValues();
let sub = rData[0][2];
let sta = rData[0][3];
let pos = rData[0][4];
let dep = rData [0][5];
let jur = rData [0][6];
let acc = rData [0][7];
let rem = rData [0][14];
let msg = 'A new account access request has been added to ';
msg+='<a href="'+SpreadsheetApp.getActiveSpreadsheet().getUrl()+'#gid='+e.source.getActiveSheet().getSheetId()+'">TEST GLOBAL - Account Access</a>';
msg+='<br>●Submitter: ' + sub;
msg+='<br>●Email: ' + sta;
msg+='<br>●Staff Position: ' + pos;
msg+='<br>●Department: ' + dep;
msg+='<br>●Jurisdiction: ' + jur;
msg+='<br>●Account Access: ' + acc;
MailApp.sendEmail({
to: "[email protected]",
subject: "Global - New Account Access Request",
htmlBody: msg,
noReply: true
});
if (e.range.columnStart != 13 || e.value != "APPROVED") return;
let msg2 = 'A new account access request has been added to ';
msg2+='<a href="'+SpreadsheetApp.getActiveSpreadsheet().getUrl()+'#gid='+e.source.getActiveSheet().getSheetId()+'">TEST GLOBAL - Account Access</a>';
msg2+= ' which has been aproved by the Business Operations Team.';
msg2+='<br>●Submitter: ' + sub;
msg2+='<br>●Email: ' + sta;
msg2+='<br>●Staff Position: ' + pos;
msg2+='<br>●Department: ' + dep;
msg2+='<br>●Jurisdiction: ' + jur;
msg2+='<br>●Account Access: ' + acc;
msg2+='<br>●Remarks: ' + rem;
MailApp.sendEmail({
to: "[email protected]",
subject: "Global - New Account Access Request",
htmlBody: msg2,
noReply: true
});
}
return
语句将退出您的函数,并且不执行其下面的行中的任何代码您可能想要的是类似的东西
if (e.range.columnStart == 8){
...
MailApp.sendEmail({
to: "[email protected]",
subject: "Global - New Account Access Request",
htmlBody: msg,
noReply: true
});
}
else if(e.range.columnStart != 13 || e.value != "APPROVED"){
...
MailApp.sendEmail({
to: "[email protected]",
subject: "Global - New Account Access Request",
htmlBody: msg2,
noReply: true
});
}
}
if
和 else if
的组合意味着脚本首先检查第一个 if
条件是否满足。else if
)if else
意味着第二个代码块仅在第一个条件未满足时执行我有类似的问题,所以也许这会有所帮助。
当A列标记为“完成”时,我需要向一个人发送一封电子邮件,当B列标记为“问题”时,我需要向另一个人发送一封电子邮件,等等。所以一开始我复制了这些功能,但应用程序脚本只会运行一个sendMailEdit函数.
但是,我能够重命名这些函数(不知道你可以这样做),然后为每个函数设置一个触发器,即我重命名和修改:
function sendMailEdit(e) {
if (e.range.columnStart != 17 || e.value != "complete") return;
const rData = e.source.getActiveSheet().getRange(e.range.rowStart, 1, 1, 18).getValues();
let teacher = rData[0][2];
let studentFirst = rData[0][3];
let studentLast = rData[0][4];
let enrolled = rData[0][11];
let withdrawn = rData[0][13];
let emailAddress = rData[0][1];
let notes = rData[0][17];
let msg = "Hi, " + teacher + ". Your student, " + studentFirst + " " + studentLast + " has been enrolled in " + enrolled + "and/or withdrawn from " + withdrawn + "\n\n " + notes + ".\n\nThis is an auto-generated response, please do not reply to this message."
Logger.log(msg);
GmailApp.sendEmail(emailAddress, "Enrollment and/or Withdrawal Notification", msg)
}
到
function processIssue(e) {
if (e.range.columnStart != 17 || e.value != "issue") return;
const rData = e.source.getActiveSheet().getRange(e.range.rowStart, 1, 1, 18).getValues();
let teacher = rData[0][2];
let studentFirst = rData[0][3];
let studentLast = rData[0][4];
let emailAddress = rData[0][1];
let notes = rData[0][17];
let msg = "Hi, " + teacher + ". There is an issue with the enrollment/withdrawal request for " + studentFirst + " " + studentLast + ". Please contact the Enrollment Team at [email protected].\n\n " + notes + ".\n\nThis is an auto-generated response, please DO NOT REPLY TO THIS MESSAGE."
Logger.log(msg);
GmailApp.sendEmail(emailAddress, "Enrollment and/or Withdrawal Notification", msg)
}
然后我创建了两个触发器: 一个用于 sendMail编辑 另一个用于 processIssue
这两个函数基本上执行相同的操作,但现在您可以为每个函数提供一个自己的触发器以“编辑时”触发。