Как получить проверочные столбцы для определенного значения в Google Apps Script? - PullRequest
2 голосов
/ 15 октября 2019

У меня есть электронная таблица, которая обновляется вручную с именами. Я установил триггер, который активирует функцию всякий раз, когда электронная таблица редактируется. Я хочу, чтобы функция проверила диапазон D1: D500 на имя «Джон». Если ячейка содержит это значение, она должна отправить электронное письмо. Я не писал код более 2 лет, поэтому я очень ржавый. Я не совсем уверен, что я сделал не так здесь. Я думаю, что испортил массив.

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 ]

5 голосов
/ 15 октября 2019

Что Росс поделился в комментарии - используя getValues (множественное число) вместо getValue +

Вам также не нужно data[i][1] (2D Array) при извлечении одного столбца данных:)

Попробуйте это -

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] может не работать

2 голосов
/ 15 октября 2019

Для удовлетворения ваших потребностей вы можете использовать следующий код:

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.

В дополнение к этому текущий код проверяет, соответствует ли значение в ячейке точно Джону. Другие варианты:

  • Проверка, содержит ли имя «Джон». В этом случае вы должны заменить условие в операторе if с data[i][0] == "John" на data[i][0].indexOf("John") > -1.
  • Проверка, начинается ли имя с"John". В этом случае вы должны заменить условие в операторе if с data[i][0] == "John" на data[i][0].indexOf("John") == 0.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...