Я очень плохо знаком со сценариями в Google Sheets, поэтому мой вопрос может быть намного сложнее, чем я думаю, или намного проще.
По сути, у меня есть Google Sheet, который отслеживает список дней рождения в одном столбце, а также к какой возрастной группе этот человек будет принадлежать - ребенок (до 13 лет), подросток (13–17 лет) или взрослый (18+) - в другом столбце. Столбец «Возрастная группа» рассчитывается по следующей формуле:
=IF(DATEDIF(H2, TODAY(), "Y") >= 18, "Adult", IF(DATEDIF(H2, Today(), "Y") >= 13, "Teen", "Child"))
со столбцом H, являющимся столбцом дня рождения.
Мой Лист Google настроен на пересчет Функция Today () работает каждый час, независимо от того, открыт файл или нет, поэтому в случае 13-го или 18-го дня рождения человека столбец «Возрастная группа» будет обновляться автоматически.
Моя цель - создать функцию, которая отправляет мне электронное письмо всякий раз, когда чья-либо возрастная группа меняется с «Ребенок на подросток» или «Подросток на взрослый», не требуя, чтобы пользователь открывал или изменял какие-либо листы Google для запуска.
Пока что Я экспериментировал с триггерами «при редактировании», но заметил, что для этого необходимо вручную изменить ячейку возрастной группы, чтобы вызвать триггер, что лишает цели автоматизации.
Я также пытался изменить мой тип события триггера от «при редактировании» до «при изменении», надеясь, что это вызовет сценарий, когда ячейка в столбце возрастной группы изменит свой результат Значение ng, но пока это не сработало.
Мой код в настоящее время выглядит следующим образом (обратите внимание, что этот код только отображает всплывающее уведомление, а не отправляет реальное электронное письмо - я еще не дошел до этого part):
/*
This is the function that is triggered by an edit to
the Google Sheet
*/
function onEdit(e) {
sendEmailOnApproval(e);
}
/*
Primarily used for earlier debugging
*/
function showMessageOnApproval(e)
{
var edited_row = checkStatusIsApproved(e);
if(edited_row > 0)
{
SpreadsheetApp.getUi().alert("Row # "+edited_row+" approved!");
}
}
/*
Determines if the Age Group column reads Teen or Adult.
Column 9 (or 'I' in the sheet) is the Age Group column.
*/
function checkStatusIsApproved(e)
{
var range = e.range;
if(range.getColumn() <= 9 &&
range.getLastColumn() >=9 )
{
var edited_row = range.getRow();
var status = SpreadsheetApp.getActiveSheet().getRange(edited_row,9).getValue();
if(status == 'Adult' || status == 'Teen')
{
return edited_row;
}
}
return 0;
}
function sendEmailOnApproval(e)
{
var approved_row = checkStatusIsApproved(e);
if(approved_row <= 0)
{
return;
}
sendEmailByRow(approved_row);
}
/*
At the moment, this function only creates a little pop-up
box containing the text of the email I would like to send.
*/
function sendEmailByRow(row)
{
var values = SpreadsheetApp.getActiveSheet().getRange(row,1,row,9).getValues();
var row_values = values[0];
var mail = composeApprovedEmail(row_values);
SpreadsheetApp.getUi().alert(" subject is "+mail.subject+"\n message "+mail.message);
}
/*
Writes the email. Column 0 (or 'A') is the first name,
1 (or 'B') is the last name.
*/
function composeApprovedEmail(row_values)
{
var first_name = row_values[0];
var last_name = row_values[1];
var age = row_values[8];
var message = "The following person should be updated on the website: "+first_name+" "+last_name+
" Age Range: "+age;
var subject = "UPDATE WEBSITE for "+first_name+" "+last_name;
return({message:message,subject:subject});
}
Хотя этот код работает при ручном изменении значений в столбце «Возрастной диапазон», как я могу адаптировать его, чтобы перехватывать автоматические c обновления, вызванные ежедневным пересчетом функции Today () на столбец опирается?