Google Script: отправьте электронное письмо за 7 дней до даты в ячейке - PullRequest
0 голосов
/ 17 февраля 2020

Я написал скрипт, в котором мне нужна помощь. Этот получает 3-ю строку и отправляет электронное письмо, которое не имеет смысла для меня. Там дата ячейка. Я хочу, чтобы он был таким, чтобы он отправлял письмо с той строкой, где день в этой ячейке - 7 дней. Вы знаете, как справиться с этим? Поэтому я думаю, что то, что я сделал, совершенно неправильно.

Лист выглядит так с несколькими именами: Фамилия | Имя | Дата

И если дата в 7 дней, я хочу получить электронное письмо.

function sendEmail() {

 //setup function
 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
 var StartRow = 3;
 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[0];



 //set HTML template for information
  message =
      "<p><b>Name: </b>" + CurrentRow[5] + ' ' + CurrentRow[4] + ' ' + "</p>" +
      "<p><b>Department: </b>" + CurrentRow[8] + "</p>" +
      "<p><b>Location: </b>" + CurrentRow[1] + "</p>" +
      "<p><b>Last working day on: </b>" + CurrentRow[6] + "</p>" +
      "<p><b>Exit date -contractual-: </b>" + CurrentRow[7] + "</p>" +
        "<p><b>Useful links: </b>"+' ' +  "</p><br><br>";

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

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

 //define who to send grants to 
 var SendTo = "person@domain.com";

 //set subject line
  var Subject = "Subject: " + CurrentRow[4] + ' ' + CurrentRow[5] + ' | Date: ' + CurrentRow[7];


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

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

Я думаю, это то, что вы хотите. Возможно, изображение вашего листа сделает его более четким.

function sendEmail() {
  var ss=SpreadsheetApp.getActive();
  var ash=ss.getSheetByName('Sheet2');
  var sr=3;
  var vA=ash.getRange(sr,1,ash.getLastRow()-sr+1,12).getValues();
  //Header Row: none,Location,None,None,Name1,Name2,LastWorkingDay,ExitDate,Department,None,None,Email Sent
  var message="";
  var dt=new Date();
  var tdv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  for (var i=0;i<vA.length;i++) {
    message =
      "<p><b>Name: </b>" + vA[i][5] + ' ' + vA[i][4] + ' ' + "</p>" +
        "<p><b>Department: </b>" + vA[i][8] + "</p>" +
          "<p><b>Location: </b>" + vA[i][1] + "</p>" +
            "<p><b>Last working day on: </b>" + vA[i][6] + "</p>" +
              "<p><b>Exit date -contractual-: </b>" + vA[i][7] + "</p>" +
                "<p><b>Useful links: </b>"+' ' +  "</p><br><br>";
    var SendTo="person@domain.com";
    var Subject="Subject: " + vA[i][4] + ' ' + vA[i][5] + ' | Date: ' + vA[i][7];
    var cd=new Date(vA[i][7]);//Im guessing this is the date for the 7 day threshold
    var cdv=new Date(cd.getFullYear(),cd.getMonth(),cd.getDate()-7).valueOf();
    if(tdv>=cdv && vA[i][11]!='Email Sent') {
      MailApp.sendEmail({to: SendTo,subject: Subject,htmlBody: message});
      ash.getRange(sr,12).setValue("Email Sent");
    }
  }             
}

Это то, что я думаю, что ваша строка заголовка может быть.

enter image description here

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