繁体   English   中英

Google 表格应用脚本:如何在下拉值更改时发送 email?

[英]Google Sheets app script : How to send email on change in dropdown values?

我们有两张纸:

  1. Sheet1 - 它有一列和 10,000 行的下拉值 - “已批准”和“未批准”。
  2. Sheet2 - 它具有与电子邮件相关的详细信息,即 email、主题、消息批准、消息未批准。

如果下拉值更改,我想发送自动 email。 如果有人将 Sheet1 下拉选择更改为“已批准”,我想发送消息批准,如果将其更改为“未批准”,我想发送消息未批准。

当我在脚本编辑器中运行它时,我已经能够成功发送 email 消息,但它没有在下拉更改时触发。 我知道我需要使用 onedit 触发器,但不知道该怎么做。 任何帮助表示赞赏。 这是代码。

function sendEmail(){

var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss1.getSheetByName('Sheet1');
var valueToCheck = sheet1.getRange("A2").getValue();

if(valueToCheck == "approved"){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2=ss.getSheetByName('Sheet2');
  var emailAddress = sheet2.getRange(2,1).getValue();
  var subject = sheet2.getRange(2,2).getValue();
  var message = sheet2.getRange(2,3).getValue();
  MailApp.sendEmail(emailAddress, subject, message);
}
else{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2=ss.getSheetByName('Sheet2');
  var emailAddress = sheet2.getRange(2,1).getValue();
  var subject = sheet2.getRange(2,2).getValue();
  var message = sheet2.getRange(2,4).getValue();
  MailApp.sendEmail(emailAddress, subject, message);
}

}

解释:

  • 确保充分利用事件 object e

  • 因为您的 function 使用MailApp这是一项需要授权的服务,所以您只能使用可安装onEdit触发器作为onEdit function 执行。

  • 您可以手动或以编程方式创建可安装触发器。 在下面的解决方案中,我向您展示了以编程方式执行它的方法。

解决方案:

执行一次function create_onEdit然后在用户对Sheet1的单元格A2进行编辑时,脚本将发送电子邮件。

// execute create_onEdit only and once 
function create_onEdit(){
    ScriptApp.newTrigger('sendEmail')
    .forSpreadsheet(SpreadsheetApp.getActive())
    .onEdit()
    .create(); 
}

// this function should never be executed manually!


function sendEmail(e){
  const ss = e.source;
  const arng = e.range;
  const ash = arng.getSheet();
  const row = arng.getRow();
  const col = arng.getColumn();
  // trigger upon edits in Sheet1 and A2 till A10000
  if(ash.getName()=="Sheet1" && row>=2 && row<=10000 && col == 1){
    if(arng.getValue() == "approved"){
      const sheet2=ss.getSheetByName('Sheet2');
      const emailAddress = sheet2.getRange(2,1).getValue();
      const subject = sheet2.getRange(2,2).getValue();
      const message = sheet2.getRange(2,3).getValue();
      MailApp.sendEmail(emailAddress, subject, message);
    }
    else{
      const sheet2=ss.getSheetByName('Sheet2');
      const emailAddress = sheet2.getRange(2,1).getValue();
      const subject = sheet2.getRange(2,2).getValue();
      const message = sheet2.getRange(2,4).getValue();
      MailApp.sendEmail(emailAddress, subject, message);
    }
  }
}

当心:

  • 您永远不应该手动执行sendEmail(e) ,因为它会丢弃未定义的错误。 此 function 是一个触发器 function,它旨在在用户编辑时自动执行(触发)。

  • function create_onEdit负责创建触发器,因此您只需要执行一次即可准备好 go。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM