谷歌表应用程序脚本:如何发送电子邮件更改下拉值?



我们有两张表:

  1. Sheet1 -它有一列&带有下拉值的10,000行- "approved"one_answers"未批准">
  2. Sheet2 -它包含与电子邮件相关的详细信息,即电子邮件、主题、消息已批准、消息未批准。

如果更改下拉值,我想发送自动电子邮件。如果有人将Sheet1下拉选择更改为"approved"如果将message-not-approved更改为&;not -approved &;

当我在脚本编辑器中运行它时,我已经能够成功地发送电子邮件消息,但它没有触发下拉更改。我明白,我需要使用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);
}
}

说明:

  • 确保充分利用事件对象e

  • 因为你的函数使用MailApp,这是一个需要授权的服务,你只能使用可安装的onEdit触发器作为onEdit函数执行

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

解决方案:

只执行一次和函数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)因为它会删除未定义的错误。这个函数是一个触发函数,它意味着在用户编辑时自动执行(触发)。

  • 函数create_onEdit负责创建触发器,所以你只需要执行一次,你就可以开始了。

相关内容

最新更新