Я использую листы Google, чтобы отслеживать детали программы и отправлять электронные письма на основе информации в листе. Каждая вкладка листа Google имеет 3-5 различных электронных писем, которые можно отправить. Электронные письма контролируются простым скриптом и триггером onEdit, который ищет «Отправить!» быть выбранным в столбце, а затем отправляет соответствующее письмо. Проблема заключается в том, что при быстром внесении большого количества изменений в лист все разные триггеры срабатывают, и сценарий приложения завершается ошибкой с сообщением об ошибке «Служба использует слишком много компьютерного времени в течение одного дня» или «Слишком много одновременных вызовов». После того, как эти пределы скрипта приложения Google достигнуты, для сброса потребуется 24 часа.
В прошлом я добавлял «Utilities.sleep (2000)» с разными временными интервалами, чтобы избежать «слишком много одновременных ...», но это только тратило больше времени выполнения и приводило меня к «слишком большому времени компьютера». .." ошибка. Итак, как я могу изменить код скрипта или триггеры, чтобы все еще работать, когда "Отправить!" выбран в таблице, но не испытываете тайм-ауты этих других листов Google?
Заранее благодарю за любую помощь.
Вот пример одного из сценариев электронной почты. Триггеры относятся к типу «при редактировании».
function SendDD01Confirmation() {
Utilities.sleep(1000)
var sheetNameToWatch = "DD";
var columnNumberToWatch = 24; // column A = 1, B = 2, etc.
var valueToWatch = "Send!";
var emailAddressColumn = 5;
var namecolumn = 3;
var datecolumn = 1;
var datewrittencolumn = 6;
var schoolcolumn = 2;
var timescolumn = 7;
var statuscolumn = 25;
var statusValue = "✓";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
var emailAddress = sheet.getRange(range.getRow(), emailAddressColumn).getValue();
var name = sheet.getRange(range.getRow(), namecolumn).getValue();
var date = sheet.getRange(range.getRow(), datecolumn).getValue();
var datewritten = sheet.getRange(range.getRow(), datewrittencolumn).getValue();
var school = sheet.getRange(range.getRow(), schoolcolumn).getValue();
var times = sheet.getRange(range.getRow(), timescolumn).getValue();
var status = sheet.getRange(range.getRow(),statuscolumn)
var emailSubject = "Program has been scheduled for " +date+ "!";
var body = "Program is coming to your class! You are scheduled to receive a one-hour presentation on " +datewritten+ " at " +school+ ", with the following time(s):\n \n" +times+ "\n (Rest of email removed for brevities sake)";
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
GmailApp.sendEmail(emailAddress, emailSubject, body)
status.setValue(statusValue);
}
}