如何获取Google Apps脚本中特定值的检查列?

时间:2019-10-15 07:43:16

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

我有一个电子表格,可以手动更新名称。我设置了一个触发器,只要电子表格被编辑,它就会激活该功能。我希望函数检查名称“ 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);
      }
  }
}

2 个答案:

答案 0 :(得分:5)

评论中分享的一些好处-使用getValues(复数)而不是getValue +

您还不需要 data[i][1] (二维数组),因为您正在获取一列数据:)

尝试一下-

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] == "John") {
      Logger.log("Got John")
    }
  }
}

您可以根据需要替换 Logger 并运行任何其他代码。希望这会有所帮助!

编辑:删除我关于data[i][1]为何无效的理由

答案 1 :(得分:2)

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

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完全匹配。其他选项是:

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