[英]Google Sheets app script : How to send email on change in dropdown values?
我们有两张纸:
如果下拉值更改,我想发送自动 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.