Google Script - отправлять электронную почту только для нового изменения значения ячейки - PullRequest
0 голосов
/ 30 октября 2018

Я искал и устранял неполадки в течение многих часов, но не могу заставить это работать.

Я пытаюсь отправить электронное письмо, когда ячейка в столбце 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.»), Которую я понимаю, потому что я использую пользовательскую функцию и не проходя диапазон, а скорее объект (вероятно, убил это).

Я также попытался в этой теме предложить включить проверку цвета фона, но безуспешно (скрипт просто не отправляет электронные письма, несмотря на полное отсутствие ошибок отладки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...