Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何编写函数检查特定单元格并返回该单元格';在电子表格中有一行_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何编写函数检查特定单元格并返回该单元格';在电子表格中有一行

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

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

它当前的功能是: 如果你在任何单元格中写“是”,就会触发电子邮件

我希望它做什么: 只有在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); 
}

问题

作为注释的后续操作,您的
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
    调用用花括号括起来(或至少