Предотвращение дублирования электронной почты Скрипт Google Spreadsheets - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я могу отправлять электронную почту с помощью скрипта Google Spreadsheets. Но мой триггер и условие if не препятствовали отправке электронной почты как i wi sh:

Вот мой код: '' '

function myFunction() {

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ws = ss.getSheetByName("MASTER");

  const h3 = 'SPP Proyek JIS Tanggal xx dari xxx';
  const headers = ws.getRange("A2:M2").getValues();
  const item = headers[0][4];
  const spec = headers[0][5];
  const sat = headers[0][6];
  const qty = headers[0][7];
  const price = headers[0][8];
  const total = headers[0][9];
  const tujuan = headers[0][10];

  const lr = ws.getLastRow();

  const tableRangeValues = ws.getRange(3, 5,lr-2,7).getDisplayValues();
  const trigger = ws.getRange(3, 1,lr-2).getValues();
  const statusEmail = ws.getRange(3, 13,lr-2).getValues();

  const htmlTemplate = HtmlService.createTemplateFromFile("Email");
  htmlTemplate.h3 = h3;
  htmlTemplate.headers = headers;
  htmlTemplate.item = item;
  htmlTemplate.spec = spec;
  htmlTemplate.sat = sat;
  htmlTemplate.qty = qty;
  htmlTemplate.price = price;
  htmlTemplate.total = total;
  htmlTemplate.tujuan = tujuan;
  htmlTemplate.tableRangeValues = tableRangeValues;
  htmlTemplate.trigger = trigger;
  htmlTemplate.statusEmail = statusEmail;

  const htmlForEmail = htmlTemplate.evaluate().getContent();

  if ((trigger != 'FALSE') && (statusEmail != 'EMAIL_SENT')); {

  GmailApp.sendEmail(
    "sistem.jis@gmail.com", 
    "Approval SPP Komersial", 
    "HTML Support",
    { htmlBody: htmlForEmail }
   );

  ws.getRange(3, 13,lr-2).setValue('EMAIL_SENT');

}

' ''

и это моя ссылка на файл с образцом: https://docs.google.com/spreadsheets/d/13TKIhY7HmK3o-j98q45XXb2nwZzfYwyYn7EULhY_RJw/edit#gid = 1216091331

похоже, у меня проблема с триггером, и если код условия, который я не понимаю

Спасибо!

1 Ответ

0 голосов
/ 17 июня 2020

Определение const trigger = ws.getRange(3, 1,lr-2).getValues(); возвращает вам массив типа [[FALSE], [true], [FALSE], [true]]

  • Чтобы ваш код работал, вам нужно определить al oop, который выполняет итерацию по каждой строке (и триггеру) неявно
  • Также удалите ; из if ((trigger != 'FALSE') && (statusEmail != 'EMAIL_SENT')); {

Пример:

function myFunction() {

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ws = ss.getSheetByName("MASTER");

  const h3 = 'SPP Proyek JIS Tanggal xx dari xxx';
  const headers = ws.getRange("A2:M2").getValues();
  const item = headers[0][4];
  const spec = headers[0][5];
  const sat = headers[0][6];
  const qty = headers[0][7];
  const price = headers[0][8];
  const total = headers[0][9];
  const tujuan = headers[0][10];
  const lr = ws.getLastRow();
  const tableRangeValues = ws.getRange(3, 5,lr-2,7).getDisplayValues();
  var data = ws.getRange(3, 1,lr-2,13).getDisplayValues();
  for (var i = 0; i < data.length; i++){
    const trigger = data[i][0];
    const statusEmail = data[i][12];

    const htmlTemplate = HtmlService.createTemplateFromFile("Email");
    htmlTemplate.h3 = h3;
    htmlTemplate.headers = headers;
    htmlTemplate.item = item;
    htmlTemplate.spec = spec;
    htmlTemplate.sat = sat;
    htmlTemplate.qty = qty;
    htmlTemplate.price = price;
    htmlTemplate.total = total;
    htmlTemplate.tujuan = tujuan;
    htmlTemplate.tableRangeValues = tableRangeValues;
    htmlTemplate.trigger = trigger;
    htmlTemplate.statusEmail = statusEmail;

    const htmlForEmail = htmlTemplate.evaluate().getContent();
    Logger.log(trigger);
    if ((trigger != 'FALSE') && (statusEmail != 'EMAIL_SENT')) {
        GmailApp.sendEmail(
      "sistem.jis@gmail.com", 
      "Approval SPP Komersial", 
      "HTML Support",
      { htmlBody: htmlForEmail }
      );

      ws.getRange(3, 13,lr-2).setValue('EMAIL_SENT');
    }
  }
}

Примечание: В В этом примере я не изменял tableRangeValues, поскольку эти значения позже обрабатываются на стороне клиента. В зависимости от того, какими вы хотите, чтобы они были похожи, вы также можете повторить этот процесс.

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