首页 > 解决方案 > 如何获取 Google Apps 脚本中特定值的检查列?

问题描述

我有一个电子表格,可以手动更新名称。我设置了一个触发器,该触发器在电子表格被编辑时激活该功能。我希望该函数检查名称“John”的范围 D1:D500。如果一个单元格包含该值,它应该发送一封电子邮件。我已经两年多没有写代码了,所以我很生疏。我不太确定我在这里做错了什么。我认为弄乱了数组。

function CheckMail() {
  var mailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("October").getRange("D1:D500"); 
  var data = mailRange.getValue();
  var dataLength = data.length;
  for(var i=0;i<dataLength;i++){
      if(data[i][1] == "John") {
         var emailAddress = "myemail@gmail.com"
         var message = 'New parcel for ' + data[i][1];
         var subject = 'New parcel';
         MailApp.sendEmail(emailAddress, subject, message);
      }
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


为了满足您的需求,您可以使用以下代码:

function CheckMail() {
  var mailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("October").getRange("D1:D500");
  var data = mailRange.getValues();
  var dataLength = data.length;
  for (var i=0; i<dataLength; i++) {
    if (data[i][0] == "John") {
       var emailAddress = "myemail@gmail.com"
       var message = 'New parcel for ' + data[i][0];
       var subject = 'New parcel';
       MailApp.sendEmail(emailAddress, subject, message);
    }
  }
}

主要区别在于:

  1. 使用getValues()代替getValue()。请注意,getValue()它只返回您拥有的范围内左上角单元格的值,而getValues()返回一个包含范围内所有值的矩阵。
  2. data[i][0]使用而不是访问元素data[i][1]。尽管单元格和行确实是 1 索引的,但 GAS 中的数组是 0 索引的。

除此之外,当前代码将检查单元格中的值是否与 John 完全匹配。其他选择是:

  • 检查名称是否包含“John”。在这种情况下,您应该将if 语句中的条件替换为data[i][0] == "John"to data[i][0].indexOf("John") > -1
  • 检查名称是否以“John”开头。在这种情况下,您应该将if 语句中的条件替换为data[i][0] == "John"to data[i][0].indexOf("John") == 0

推荐阅读