Javascript 如何编写函数检查特定单元格并返回该单元格';在电子表格中有一行
说明:我设置了一个电子邮件触发器,以便在电子表格发生符合以下条件的更改时发送电子邮件 它当前的功能是: 如果你在任何单元格中写“是”,就会触发电子邮件 我希望它做什么: 只有在P列中写“是”,它才会触发电子邮件。还希望电子邮件主题行包括“是”写在哪一行 提前谢谢你Javascript 如何编写函数检查特定单元格并返回该单元格';在电子表格中有一行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,说明:我设置了一个电子邮件触发器,以便在电子表格发生符合以下条件的更改时发送电子邮件 它当前的功能是: 如果你在任何单元格中写“是”,就会触发电子邮件 我希望它做什么: 只有在P列中写“是”,它才会触发电子邮件。还希望电子邮件主题行包括“是”写在哪一行 提前谢谢你 function sendApprovalEmail() { var sheetNameToWatch = "Spreadsheet title"; //This is where my spreadsheet's title go
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);
}
问题 作为注释的后续操作,您的
sendmail()
方法调用超出了if
语句的范围。编写if
语句有三种方法:
完整语法
在我看来,这是(尽管缺乏可读性)编写if…else
语句以避免调试问题的最佳方法。此外,使用块语句的方法(用{}
包装所有内容)允许将多个条件语句写入子句:
如果(条件){
条件语句;
}否则{
其他有条件陈述;
}
简短语法
您正在使用的语句不涉及块语句,这在一次只执行一个条件语句集时是可取的,但您需要确保if
语句在条件语句之前未关闭(即没有;
,表示语句结束):
if(条件)
条件语句
其他的
另一个条件
速记语法
如果需要编写一个小的、易于阅读的条件,并将结果写入变量,则可以使用条件运算符(在示例中,完整语法用于多个条件):
condition1?条件1:条件2?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;
有用的链接
条件算子李>
If
语句李>
getRow()
方法李>
getRowIndex()
方法李>
问题
作为注释的后续操作,您的sendmail()
方法调用超出了if
语句的范围。编写if
语句有三种方法:
完整语法
在我看来,这是(尽管缺乏可读性)编写if…else
语句以避免调试问题的最佳方法。此外,使用块语句的方法(用{}
包装所有内容)允许将多个条件语句写入子句:
如果(条件){
条件语句;
}否则{
其他有条件陈述;
}
简短语法
您正在使用的语句不涉及块语句,这在一次只执行一个条件语句集时是可取的,但您需要确保if
语句在条件语句之前未关闭(即没有;
,表示语句结束):
if(条件)
条件语句
其他的
另一个条件
速记语法
如果需要编写一个小的、易于阅读的条件,并将结果写入变量,则可以使用条件运算符(在示例中,完整语法用于多个条件):
condition1?条件1:条件2?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;
有用的链接
条件算子李>
If
语句李>
getRow()
方法李>
getRowIndex()
方法李>
简单-除了引用getActiveCell()
,还可以检查结果范围上的getColumn()
(单元格是范围
的一个实例),并将返回的数字
与基于1的列引用进行比较(例如,“A”等于1)。如果您需要行,则有一个成对的方法getRow()
事实上,对于第一个常见问题,很抱歉,您遇到的问题很可能是由于if
语句没有用花括号包装MailApp.sendmail
调用而导致的(我错过了带有if
语句的行)(或者至少不带;
),基本上让它无条件触发简单-除了引用getActiveCell()
,还检查结果范围上的getColumn()
(单元格是范围的一个实例)并将返回的Number
与基于1的列引用(例如“A”等于1)进行比较。如果需要行,则有一个成对的方法getRow()
实际上,对于第一个常见问题,很抱歉,您遇到的问题很可能是(我错过了if
语句的行)由于if
语句未将MailApp.sendmail
调用用花括号括起来(或至少