Отправить на несколько писем с помощью скрипта Google - PullRequest
1 голос
/ 12 марта 2020
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 5; // Number of rows to process
  // Fetch the range of cells A2:I6
  var dataRange = sheet.getRange(startRow, 1, numRows, 10);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var counter = 0;
  var qua_num = [[]];
  for (var i in data) {
    var row = data[i];
    var days = row[8];
    if (days > -14) {
    var emailAddress = row[9]; // First column
      qua_num += [row[0]];
      counter += 1;
    }
  }
  var message = qua_num + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration'; // Second column
  var subject = 'Check Equipment Calibration Alert';
  MailApp.sendEmail(emailAddress, subject, message);
}

Текущий код позволяет мне отправлять только один адрес электронной почты из таблицы Google. Если в каждой строке есть разные адреса электронной почты (несколько строк могут иметь один и тот же адрес электронной почты), как я могу изменить функцию? См. Пример электронной таблицы Google ниже.

Снимок экрана электронной таблицы Google

На основании информации в электронной таблице QUA-005 и QUA-007 соответствуют условию если заявление. Ожидаемый результат будет следующим:

Электронная почта 1 на адрес электронной почты 1 Оборудование QUA-005 приближается к сроку или не соответствует требованиям. Пожалуйста, свяжитесь с QA для замены или отправки оборудования для повторной калибровки.

Электронная почта 2 на адрес электронной почты 2 Оборудование QUA-007 приближается к сроку выполнения или не выполнено. Пожалуйста, свяжитесь с QA для замены или отправки оборудования для повторной калибровки.

Если адрес электронной почты тот же, то на выходе будет:

QUA-005, QUA-007 оборудование приближаются к сроку или вне очереди. Пожалуйста, свяжитесь с QA для замены или отправки оборудования для повторной калибровки.

1 Ответ

2 голосов
/ 13 марта 2020
  • Вы хотите отправлять электронные письма на адрес электронной почты столбца «J», когда значение столбца «I» превышает -14.
  • При наличии одинаковых адресов электронной почты в столбце «J» необходимо объединить значения столбца «А» и отправить их на один адрес электронной почты.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

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

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

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

From:

var counter = 0;
var qua_num = [[]];
for (var i in data) {
  var row = data[i];
  var days = row[8];
  if (days > -14) {
  var emailAddress = row[9]; // First column
    qua_num += [row[0]];
    counter += 1;
  }
}
var message = qua_num + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration'; // Second column
var subject = 'Check Equipment Calibration Alert';
MailApp.sendEmail(emailAddress, subject, message);

To:

data.reduce((m, [qua_num,,,,,,,,daysPastCal,emailAddress]) => {
  if (daysPastCal > -14) m.set(emailAddress, m.has(emailAddress) ? [...m.get(emailAddress), qua_num] : [qua_num]);
  return m;
}, new Map())
.forEach((qua_num, emailAddress) => {
  var message = qua_num.join(",") + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration';
  var subject = 'Check Equipment Calibration Alert';
  MailApp.sendEmail(emailAddress, subject, message);
});

Примечание:

  • В этом случае, пожалуйста, включите V8 в редакторе сценариев.

Ссылки:

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