Простое ДА в ячейке в столбце А запускает EMAIL

Я искал на форумах, и ответ, скорее всего, там, но мне нужна помощь.

Если буква «Y» введена в столбец A, мне нужно автоматическое электронное письмо, отправленное заранее определенному списку людей. В идеале это электронное письмо должно включать автоматически сгенерированное тело электронного письма в соответствии с данными строки (Товар, поставщик, общая сумма, задание и т. д.).

Это то, что я написал до сих пор. Он отправляет электронное письмо каждый раз, когда я вношу изменения. Я безуспешно пытался уточнить триггеры проекта и бит if (Index of).

  function sendNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var row = sheet.getActiveRange().getRow();
  var cellvalue = ss.getActiveCell().getValue().toString();
  var recipients = "[email protected]";
  var message = '';
  if(cell.indexOf('A')!="Y"){ 
    message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue()
  }
  var subject = 'Update to '+sheet.getName();
  var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»';
  MailApp.sendEmail(recipients, subject, body);
};

person Carlos Gonzalez    schedule 15.08.2016    source источник


Ответы (1)


Ты почти там!

В вашем if заявлении:

if(cell.indexOf('A')!="Y"){ 

Вам нужно оценить две вещи: во-первых, редактирует ли пользователь столбец A, а во-вторых, если значение ячейки равно «Y».

Для первого у вас уже есть значение текущей ячейки в cellvalue, поэтому просто оцените, если cellvalue == "Y".

Для второго вам нужно оценить, редактирует ли пользователь столбец A, вы можете использовать .getColumnIndex(), чтобы получить индекс диапазона, в этом случае ячейка столбца A вернет 1, поэтому вы оцениваете sheet.getActiveCell().getColumnIndex() == 1

Теперь вам просто нужно использовать логический оператор && чтобы проверить, являются ли оба выражения истинными.

Ваша строка должна выглядеть так:

if(cellvalue == "Y" && sheet.getActiveCell().getColumnIndex() == 1){

Наконец, чтобы убедиться, что электронное письмо отправляется только в том случае, если строка выше оценивается как true, переместите subject, body и MailAppвнутри оператора if:

function sendNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var row = sheet.getActiveRange().getRow();
  var cellvalue = ss.getActiveCell().getValue().toString();
  var recipients = "[email protected]";
  var message = '';
  if(cellvalue == "Y" && sheet.getActiveCell().getColumnIndex() == 1){
    message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue();
    var subject = 'Update to '+sheet.getName();
    var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»';
    MailApp.sendEmail(recipients, subject, body);
  }
};
person ocordova    schedule 15.08.2016
comment
Абсолютный спасатель! - person Carlos Gonzalez; 17.08.2016