Как отправить электронное письмо каждый раз, когда ячейка в диапазоне изменяется на заданные c данные, и включать соответствующую информацию заголовка? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть базовые c автоматизированные c электронные письма, которые отлично работают, когда одна ячейка содержит определенные c данные, но у меня возникают проблемы с выяснением, как сделать следующее:

У меня есть Google Sheet , в котором я пытаюсь настроить управляемый временем скрипт, который выполняет поиск в диапазоне B2: D7 на Sheet1 для любых ячеек, которые изменились на «HELP RQD» с момента последнего запуска скрипта. Для каждого совпадения необходимо отправить электронное письмо с соответствующим заголовком столбца и строки этой ячейки. Заголовки столбцов имеют разные случайные имена станций, а заголовки строк имеют разные значения времени. Связанный пример выглядит следующим образом:

Example Sheet

Пример 1 - Если ячейка C7 получает слова «HELP RQD» с момента последнего запуска сценария: отправлено, что гласит: «Запрошена помощь для STATION 2 в 12: 00 », и больше не отправляются электронные письма о ячейке C7, пока ее данные не будут изменены на что-то другое, а затем снова изменены на «HELP RQD» еще раз.

Пример 2 - Если ячейка C7 и ячейка D3 получают слова «HELP RQD» с момента последнего запуска сценария: отправляются два электронных письма, первое из которых гласит «Справка запрошена для *» 1018 * STATION 2 в 12: 00 ', второй из которых гласит «Помощь, запрошенная для MACHINE III в 8: 00 », и больше не отправляются электронные письма о ячейке C7 или D3 до тех пор, пока их данные не будут изменены на что-то другое, а затем снова изменены на «HELP RQD».

Вот мой текущий сценарий, но он отправляет непрерывные электронные письма, только если просто ячейка C7 содержит «HELP RQD», пока значение C7 не изменится на что-то g else:

function HelpRqd(e) {
  var sp = PropertiesService.getScriptProperties();
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Sheet1");
  var valueToCheck = sheet.getRange("C7").getValue();
  if (valueToCheck == "HELP RQD") {
    MailApp.sendEmail("example@example.com", "Help Rqd", "Help requested for STATION 2 at 12:00");
  }
}

Каков наилучший способ расширить это, чтобы включить поиск в диапазоне и отправить по электронной почте соответствующую информацию заголовка?

1 Ответ

1 голос
/ 19 марта 2020

Ответ:

Вы можете продолжать использовать метод getRange(), но расширить его до полного диапазона и проверить каждый с помощью кода al oop.

. :

Следующий код получает номер станции из строки 1 и время из столбца A на основе ячейки, обозначенной «HELP RQD», и динамически вставляет его в электронное письмо:

function HelpRqd(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var fullRange = sheet.getRange("B2:D7").getValues();
  var scriptProperties = PropertiesService.getScriptProperties();

  for (var i = 0; i < fullRange.length; i++) {
    for (var j = 0; j < fullRange[i].length; j++) {

      if (j == 0) {
        var cell = "B" + (i + 1);
      }
      else if (j == 1) {
        var cell = "C" + (i + 1);
      }
      else if (j == 2) {
        var cell = "D" + (i + 1);
      }  

      if (fullRange[i][j] == "HELP RQD") {      
        if (scriptProperties.getProperty(cell) == "HELP RQD") {
          continue;
        }
        else if (scriptProperties.getProperty(cell) != "HELP RQD") {
          scriptProperties.setProperty(cell, "HELP RQD");

          var time = sheet.getRange("A" + (i + 2)).getDisplayValue();
          if (j == 0) {
            var station = sheet.getRange("B" + 1).getValue();
          }
          else if (j == 1) {
            var station = sheet.getRange("C" + 1).getValue();
          }
          else if (j == 2) {
            var station = sheet.getRange("D" + 1).getValue();
          } 

          MailApp.sendEmail("example@domain.com", "Help Rqd", "Help requested for " + station + " at " + time);
        }
      }
      else {
        if (scriptProperties.getProperty(cell) == "HELP RQD") {
          scriptProperties.setProperty(cell, "CLEAR");
        }
      }
    }
  }
}

I надеюсь, что это полезно для вас!

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...