如何在 Google Sheet 中为单个 sendMailEdit 函数创建多个触发事件?

问题描述 投票:0回答:2

我目前正在尝试编写一个脚本,当编辑不同的列时,该脚本将向不同的人发送电子邮件。

例如,如果编辑了 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
   });
}
google-apps-script google-sheets triggers gmail
2个回答
1
投票

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
    条件是否满足。
  • 如果满足第一个条件,脚本将执行相应的代码块(向 AAA 发送电子邮件)
  • 如果第一个条件不满足,脚本跳转到第二个条件语句(
    else if
    )
  • 如果满足第二个条件,脚本将执行相应的代码块(向 BBB 发送电子邮件)
  • 如果两个条件都不满足,则脚本不会执行任何相应的代码块
  • 如果两个条件都满足 - 脚本仅执行第一个代码块,因为
    if else
    意味着第二个代码块仅在第一个条件未满足时执行

0
投票

我有类似的问题,所以也许这会有所帮助。

当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

这两个函数基本上执行相同的操作,但现在您可以为每个函数提供一个自己的触发器以“编辑时”触发。

© www.soinside.com 2019 - 2024. All rights reserved.