说明:我设置了电子邮件触发器,以便在电子表格中发生符合以下条件的更改时,它将发送电子邮件。
当前操作是: 如果您在ANY单元格中输入“是”,则会触发电子邮件。
我希望它做什么: 仅当您在P列中输入“是”时,它才会触发电子邮件。也希望电子邮件主题行包含“是”写在哪一行。
预先感谢您!
function sendApprovalEmail() {
var sheetNameToWatch = "Spreadsheet title"; //This is where my spreadsheet's title goes
var columnNumberToWatch = 16; //I think this should be column P?
var valueToWatch = 'Yes';
var s = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
var email = 'email@email.com'; //for my email
var message = "Message text will go here";
var subject = "Subject text will go here";
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue().toString().toLowerCase() == valueToWatch);
MailApp.sendEmail(email, subject, message);
}
答案 0 :(得分:0)
问题
作为注释的后续内容,您的sendEmail()
方法调用不在if
语句的范围内。编写if
语句的方法有以下三种:
完整语法
我认为,这(尽管缺乏可读性)是编写if...else
语句以避免调试问题的最佳方法。此外,使用块语句(用{}
包装所有内容)的方法允许将多个条件语句写入子句:
if(condition) {
conditional statements;
}else {
other conditional statements;
}
短语法
您所使用的语句不涉及块语句,这一次只执行一个 个条件statemenet时可能是需要的,但是您需要确保if
语句在条件(即没有;
,表示语句结束)之前没有关闭:
if(condition)
conditional statement
else
another conditional
速记语法
条件运算符,如果您需要编写一个小的,易于阅读的条件并将结果写入变量(在示例中,完整语法用于多个条件),则可以使用该条件运算符:
condition1 ? onYes1 : condition2 ? onYes2
解决方案
如上所述,在使用短语法时,您需要确保条件语句在if
语句的范围内,因此您需要删除;
,此外,我建议对可读性并使用严格的比较:
var isSheet = sheet.getName() === sheetNameToWatch;
var isCol = range.getColumn() === columnNumberToWatch;
var isValue = range.getValue().toString().toLowerCase() == valueToWatch;
if (isSheet && isCol && isValue) {
MailApp.sendEmail(email, subject, message);
}
访问行
关于第二个问题,您可以使用getRow()
(或getRowIndex()
来访问行号,因为它们当前是相同的),其余的非常简单:
var curRow = range.getRow();
var subject = 'Yes is in row '+curRow;
有用的链接