Обновление:
- Как вы сказали в комментарии, вы хотите, чтобы электронное письмо отправлялось при редактировании ячейки инвентаря, и только если это отредактированное количество инвентаря ниже соответствующего минимума. Итак, здесь я обновляю свой ответ соответствующим образом.
Во-первых, я полагаю, вы уже сделали это, но поскольку функция использует sendEmail
, вам придется предоставить авторизацию для нееработать. Я создал триггер для этого. Запустите это один раз:
function createEditTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger("CheckInventory")
.forSpreadsheet(ss)
.onEdit()
.create();
}
Затем эта функция будет запускаться каждый раз, когда электронная таблица редактируется. Чтобы избежать отправки электронного письма при каждом редактировании файла, нам необходимо условие, которое проверяет, является ли отредактированная ячейка инвентарным запасом и находится ли этот запас ниже минимального:
function CheckInventory(e) {
var ss = e.source;
var inventorySheet = ss.getSheetByName("Inventory");
var rowIndex = e.range.getRow();
var columnIndex = e.range.getColumn();
var numCols = 6;
var row = inventorySheet.getRange(rowIndex, 1, 1, numCols).getValues()[0];
var editedInventory = row[5];
var editedMinimum = row[3];
var sheetName = ss.getActiveSheet().getName();
// Checking that: (1) edited cell is an inventory quantity, and (2) Inventory is below minimum
if(editedInventory <= editedMinimum && sheetName == "Inventory" && columnIndex == 6 && rowIndex > 1) {
var inventoryValues = inventorySheet.getDataRange().getValues();
var emailBody = "";
for(var i = 1; i < inventoryValues.length; i++) {
var inventory = inventoryValues[i][5];
var minimum = inventoryValues[i][3];
if(inventory <= minimum) {
var productName = inventoryValues[i][0] + " " + inventoryValues[i][1];
var productUnits = minimum + " " + inventoryValues[i][4];
var messagePart1 = "Inventory for " + productName + " has gone under " + productUnits + ". ";
var messagePart2 = "Organise purchase order. Inventory as of today is: " + inventory + " " + inventoryValues[i][4];
var message = messagePart1.concat(messagePart2);
var newItem = "<p>".concat(message, "</p>");
emailBody += newItem;
}
}
var emailSubject = "Low inventory alert";
var emailAddress = "your-email@your-domain.com";
// Send Alert Email
if(emailBody != "") {
MailApp.sendEmail({
to: emailAddress,
subject: emailSubject,
htmlBody: emailBody
});
}
}
}
Как я уже сказал вкомментарий, если вы просто хотите отправить электронное письмо, не имеет смысла иметь много тем электронной почты, поэтому я жестко закодировал эту тему.
Что касается электронных писем, я предположил, что вы просто хотите, чтобы адрес электронной почты получал письмо, поэтому я также жестко запрограммировал его. Если вы хотите, чтобы все различные адреса электронной почты, найденные на вкладке «Уведомления», получали сообщения электронной почты обо всех продуктах, необходимо внести небольшое исправление в этот код. Скажите, если вам это нужно.
Кроме того, я вообще не использовал вашу вкладку уведомлений, я создал сообщение напрямую, используя скрипт. Я не уверен, что так полезно иметь лист «Правила уведомления». Большая часть его информации такая же, как и в инвентаре, и остальные данные (адрес электронной почты, в основном) могут быть легко включены туда. Но все, что вам подходит.
Надеюсь, это поможет.