我已经在论坛上搜索过了,答案很可能就在那里,但我需要一些帮助。
如果在A列中输入字母"Y",我需要自动触发电子邮件到预定的人员列表。理想情况下,此电子邮件将包含根据行数据(Item、vendor、total、job等)自动生成的电子邮件正文。
这是我到目前为止所写的。每次更改时,它都会发送一封电子邮件。我尝试过,但没有成功,以改进项目的触发器和if (Index of)
位。
function sendNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell().getA1Notation();
var row = sheet.getActiveRange().getRow();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipients = "me@gmail.com";
var message = '';
if(cell.indexOf('A')!="Y"){
message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue()
}
var subject = 'Update to '+sheet.getName();
var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»';
MailApp.sendEmail(recipients, subject, body);
};
你就快成功了!
在你的if
语句中:
if(cell.indexOf('A')!="Y"){
您需要计算两件事,首先如果用户正在编辑列A,其次如果单元格的值为"Y"。
对于第一个,您已经有cellvalue
中当前单元格的值,因此只需计算cellvalue == "Y"
。
对于第二个,你需要计算用户是否正在编辑列A,你可以使用.getColumnIndex()
,这将获得范围的索引,在这种情况下,单元格,列A将返回1
,所以你计算sheet.getActiveCell().getColumnIndex() == 1
现在,只需要使用逻辑运算符&&检查两个表达式的值是否为true。
你的行应该像这样:
if(cellvalue == "Y" && sheet.getActiveCell().getColumnIndex() == 1){
最后,为了确保电子邮件仅在上述行计算结果为true时发送,将subject
, body
和MailApp
移动到if语句中:
function sendNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell().getA1Notation();
var row = sheet.getActiveRange().getRow();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipients = "me@gmail.com";
var message = '';
if(cellvalue == "Y" && sheet.getActiveCell().getColumnIndex() == 1){
message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue();
var subject = 'Update to '+sheet.getName();
var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»';
MailApp.sendEmail(recipients, subject, body);
}
};