Это может быть достигнуто с помощью устанавливаемого триггера onEdit
, вам нужно настроить его, либо перейдя к своим триггерам, либо запустив приведенный ниже код , предоставленный Google один раз.
function createSpreadsheetEditTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('statusChange')
.forSpreadsheet(ss)
.onEdit()
.create();
}
Делая это, вы можете проверить, обновляется ли столбец O, а затем выполнить свои if else
операторы на основе этого результата. Я также очистил некоторые переменные, чтобы вы не выполняли множественные вызовы SpreadsheetApp.getActiveSpreadsheet()
без необходимости.
Примечание: вы не сможете запустить приведенный ниже скрипт вручную, он будет запускаться автоматически при редактировании листа.
function statusChange(e){
var sp = SpreadsheetApp.getActiveSpreadsheet();
var ss = sp.getSheetByName('R & A');
var row = e.range.getRow(); //get row # for edited range
var col = e.range.getColumn(); //get column # for edited range
if(col === 15){ //check if column O was updated
var templateText = sp.getSheetByName("Template for Email").getRange(1,1).getValue();
var quotaLeft = MailApp.getRemainingDailyQuota();
if(quotaLeft < 1){
Browser.msgBox("You have " + quotaLeft + " left and you're trying to send 1 email. Email was not sent.");
} else{
var currentEmail = ss.getRange(row, 3).getValue();
var currentSheetTitle = ss.getRange(row, 11).getValue();
var currentName = ss.getRange(row, 4).getValue();
var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";
MailApp.sendEmail(currentEmail, subjectLine, messageBody);
} //close else statement
} //close if statement
}
Поскольку все, что вы пытаетесь сделать, - это отправить электронное письмо для строки, которую вы отредактировали, вам не нужен оператор for
, который вы имели в сценарии. Вы можете получить строку и столбец для диапазона, который был отредактирован, и использовать вместо этого оставшуюся часть сценария.