如何编写函数来检查特定的单元格并在电子表格中返回该单元格的行

时间:2019-06-28 03:44:01

标签: javascript google-apps-script google-sheets

说明:我设置了电子邮件触发器,以便在电子表格中发生符合以下条件的更改时,它将发送电子邮件。

当前操作是: 如果您在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); 
}

1 个答案:

答案 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;

有用的链接

  1. 条件运算符reference;
  2. If语句reference;
  3. getRow()方法reference;
  4. getRowIndex()方法reference;