Отправка электронной почты со значениями только для новых строк в электронной таблице с помощью Apps Script - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь использовать сценарий для отправки электронного письма при добавлении новых строк в таблицу отзывов. Есть замечательная тема: « Отправить одно электронное письмо со значениями из всех новых строк в электронной таблице », но я обнаружил, что при использовании триггера onEdit для следующего скрипта я все равно получу пустое письмо при любом редактировании, даже если все строки в столбце 9 (столбец с уведомлением отправлены) помечены как «отправленные».

Можно ли добавить оператор if, чтобы отправлять электронную почту, только если есть новая строка с пустым столбцом 9 (поэтому я не получаю пустые электронные письма с триггером onEdit)?

function sendEmail() {

//setup function
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (ActiveSheet.getName() == 'Review Tracker') {
var StartRow = 6;
var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11);
var AllValues = WholeRange.getValues();
for (i in AllValues) {
  var row = AllValues[i];
  if (row[7] === "Ready for Review") {  

  var message = "";
  //iterate loop
  for (i in AllValues) {

  //set current row
  var CurrentRow = AllValues[i];

  //define column to check if sent
  var EmailSent = CurrentRow[10];

  //if row has been sent, then continue to next iteration
  if (EmailSent == "sent") 
  continue;

  //set HTML template for information
  message +=
      "<p><b>Name: </b>" + CurrentRow[0] + "</p>" +
      "<p><b>Client: </b>" + CurrentRow[1] + "</p>" +
      "<p><b>Deliverable Title: </b>" + CurrentRow[2] + "</p>" +
      "<p><b>Link to Review Thread: </b>" + CurrentRow[3] + "</p>" +
      "<p><b>Deadline for Review: </b>" + CurrentRow[4] + "</p>" +
      "<p><b>Delivery to Client: </b>" + CurrentRow[5] + "</p>" +
      "<p><b>Notes: </b>" + CurrentRow[6] + "</p>" +
      "<p><b>Status: </b>" + CurrentRow[7] + "</p>" + "</p><br><br>";

  //set the row to look at
  var setRow = parseInt(i) + StartRow;

  //mark row as "sent"
  ActiveSheet.getRange(setRow, 10).setValue("sent");
  }

  //define who to send emails to 
  var SendTo = "email@address.com";

  //set subject line
  var Subject = "New Deliverable to Review for " + CurrentRow[1];

  //send the actual email  
  MailApp.sendEmail({
    to: SendTo,
    subject: Subject,
    htmlBody: message,
    });
  }
  }
  }
}

1 Ответ

0 голосов
/ 08 мая 2018

Изменить с

var Subject = "New Deliverable to Review for " + CurrentRow[1];

  //send the actual email  
  MailApp.sendEmail({
    to: SendTo,
    subject: Subject,
    htmlBody: message,
    });

К

var Subject = "New Deliverable to Review for " + CurrentRow[1];

  //send the actual email If message is not empty
  if (message) {// Added
  MailApp.sendEmail({
    to: SendTo,
    subject: Subject,
    htmlBody: message,
    });
   }//Added

Модифицированный скрипт:

function sendEmail() {

  //setup function
  var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  if (ActiveSheet.getName() == 'Review Tracker') {
    var StartRow = 6;
    var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
    var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11);
    var AllValues = WholeRange.getValues();

    var message = "";
    //iterate loop
    for (i in AllValues) {

      //set current row
      var CurrentRow = AllValues[i];

      if (CurrentRow[7] == "Ready for Review" && CurrentRow[9] != "sent") {


        //define column to check if sent
        //var EmailSent = CurrentRow[10];

        //if row has been sent, then continue to next iteration
        //if (EmailSent == "sent") {
          //continue;}

        //set HTML template for information
        message +=
          "<p><b>Name: </b>" + CurrentRow[0] + "</p>" +
            "<p><b>Client: </b>" + CurrentRow[1] + "</p>" +
              "<p><b>Deliverable Title: </b>" + CurrentRow[2] + "</p>" +
                "<p><b>Link to Review Thread: </b>" + CurrentRow[3] + "</p>" +
                  "<p><b>Deadline for Review: </b>" + CurrentRow[4] + "</p>" +
                    "<p><b>Delivery to Client: </b>" + CurrentRow[5] + "</p>" +
                      "<p><b>Notes: </b>" + CurrentRow[6] + "</p>" +
                        "<p><b>Status: </b>" + CurrentRow[7] + "</p>" + "</p><br><br>";

        //set the row to look at
        var setRow = parseInt(i) + StartRow;

        //mark row as "sent"
        ActiveSheet.getRange(setRow, 10).setValue("sent");
      }//if review ready
    }//For loop close

    //define who to send emails to 
    var SendTo = "email@address.com";

    //set subject line
    var Subject = "New Deliverable to Review for " + CurrentRow[1];

    //send the actual email   if message is not empty
    if (message) {
      MailApp.sendEmail({
        to: SendTo,
        subject: Subject,
        htmlBody: message,
      });
    }//if message
  }//if sheetName Review
}//End Func
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...