Как зациклить функцию onEdit для отправки электронных писем из нескольких строк в Google Sheets? - PullRequest
1 голос
/ 11 июня 2019

Я очень новичок в этом, и в моей работе есть лист Google, в котором содержится вся наша информация о потенциальных клиентах из FB, и я пытаюсь получить функцию (onEdit), которая будет отправлять электронное письмо ведущему на основе данные одной ячейки. Например, когда A2 содержит «Follow Up», то он отправляет электронное письмо на адрес в D2, а основной текст приходит от J2 (стандартный ответ для проверки данных «Follow Up»). Прямо сейчас это работает для строки 2, однако при вводе «Follow Up» в любой другой строке каждая строка в списке отправляет электронное письмо. Например, при запуске события в A29 он отправляет основной текст в столбце J на ​​каждое электронное письмо в списке. Я пытаюсь сделать так, чтобы событие отправляло только одно электронное письмо за раз (в зависимости от требований проверки активной ячейки).

Я приложил все усилия, чтобы просмотреть другие посты здесь, чтобы соединить этот код, используя цикл for, чтобы также проверять наличие новых строк (новые строки постоянно добавляются на лист). Три оператора if, вероятно, неаккуратны, но я пока не знаю, как это объединить в единственное выражение if. Я думал о добавлении столбца, в котором указано, было ли уже отправлено письмо, и обновил цикл for или оператор if, чтобы не отправлять письмо в эти строки.

  var sheetname = "Prometheus";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);
  var ac = sheet.getActiveCell();
  var endRow = sheet.getLastRow();
  var startRow = 1;

for (var i = endRow; i >= startRow; i--) {

  var rangeToCheck = sheet.getRange(i, 1, 1, 21);

  if (ac.getValue() == "Appt. Set (appointment is setup)") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Appt. Confirmation",
      body: data[0][10]
    }); break;
  } else if (ac.getValue() == "Lead") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Welcome",
      body: data[0][11]
    }); break;
  } else if (ac.getValue() == "Follow Up") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Follow Up",
      body: data[0][12]
    });
  }
 }
}

Я ожидаю, что когда моя активная ячейка выполнит условие в операторе if, только одна электронная почта будет отправлена ​​контактной информации в той же строке. Прямо сейчас он отправляет электронные письма всем в листе, когда условие выполняется в одну строку.

1 Ответ

0 голосов
/ 11 июня 2019
  • Если в столбце «B» в строке с активной ячейкой указаны значения «Appt. Set (назначение назначено)», «Lead» и «Follow Up», вы хотите отправить электронное письмо, используя значения ряд.
    • Вы хотите изменить тело письма на значение столбца "B".
  • Например, когда вы помещаете «Follow Up» в столбец «B», вы хотите запустить скрипт, используя триггер события OnEdit.

Если мое понимание верно, как насчет этой модификации? В этой модификации использовался объект события, который можно получить с помощью триггера события OnEdit. Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Перед использованием этого сценария установите триггер события OnEdit для RunByOnEdit() измененного сценария.

Как установить триггер OnEdit:

  • Откройте редактор скриптов.
    • Редактировать -> Триггеры текущего проекта.
    • Нажмите «Добавить триггер».
    • Установите RunByOnEdit для «Выберите, какую функцию запускать».
    • Установите «Из электронной таблицы» для «Выбрать источник события».
    • Установите «При редактировании» для «Выберите тип события».

Модифицированный скрипт:

function RunByOnEdit(e) {
  var sheetname = "Prometheus";
  var sheet = e.range.getSheet();
  var range = e.range;
  if (sheet.getSheetName() == sheetname && range.columnStart == 2) {
    var data = sheet.getRange(range.getRow(), 1, 1, 21).getValues()[0];
    var object = {
      to: data[4] // Column "E"
    };
    if (e.value == "Appt. Set (appointment is setup)") {
      object.subject = "Appt. Confirmation";
      object.body = data[10]; // Column "K"
    } else if (e.value == "Lead") {
      object.subject = "Welcome";
      object.body = data[11]; // Column "L"
    } else if (e.value == "Follow Up") {
      object.subject = "Follow Up";
      object.body = data[12];  // Column "M"
    }
    if (object.subject) MailApp.sendEmail(object);
  }
}

Ссылки:

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

...