Я искал и устранял неполадки в течение многих часов, но не могу заставить это работать.
Я пытаюсь отправить электронное письмо, когда ячейка в столбце C помечена как Полная. Письмо будет содержать информацию из столбца D, а также название листа. Приведенный ниже код работает, но если в столбце C более одного элемента, отмеченного как Complete, он отправит несколько электронных писем.
Как я могу изменить этот код, чтобы отправлять электронную почту только один раз для вновь отмеченных элементов?
Я бы предпочел не добавлять столбец, помечающий элемент как «электронное письмо отправлено».
РЕДАКТИРОВАТЬ: Во избежание сомнений, я хотел бы отметить, что я настроил это как триггер OnEdit, так что это не проблема.
function sendNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// figure out what the last row is
var lastRow = sheet.getLastRow();
// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;
// grab column 3 (the Project Status column)
var range = sheet.getRange(2,3,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var projectStatus_values = range.getValues();
// grab column 4 (the Project Name column)
var namerange = sheet.getRange(2,4,lastRow-startRow+1,1 );
var nameNumRows = namerange.getNumRows();
var projectName_values = namerange.getValues();
// Get Active Sheet Name
var sheetname = SpreadsheetApp.getActiveSheet().getName();
// Loop over the Project Status values
for (var i = 0; i <= numRows - 1; i++) {
var projectStatus = projectStatus_values[i][0];
if(projectStatus == "Complete")
{var projectName = projectName_values[i][0];
//Define Notification Details
var recipients = "EMAIL@EMAIL.com";
var subject = sheetname + " has a new project marked Completed.";
var body = sheetname + " has a new project marked Completed:\n\n" + projectName + ".\n\nVisit " + ss.getUrl() + " to view the changes.";
//Send the Email
MailApp.sendEmail(recipients, subject, body);
}
}
//End sendNotification
Из множества потоков, которые я просмотрел, я нашел два подхода, которые, казалось, должны работать, но оба не сработали для меня.
Сначала я попробовал предложения Хайда здесь --- но я столкнулся с ошибкой («TypeError: Невозможно найти функцию getvalue в объекте Range.»), Которую я понимаю, потому что я использую пользовательскую функцию и не проходя диапазон, а скорее объект (вероятно, убил это).
Я также попытался в этой теме предложить включить проверку цвета фона, но безуспешно (скрипт просто не отправляет электронные письма, несмотря на полное отсутствие ошибок отладки).