简体   繁体   中英

Auto email all rows of google sheet that meet a certain condition

I have modified a code I found online to look at a google sheet (sample below) and send an email when an employee's work permit is about to expire in 30 days.

However, I would like to modify it to send one email (to one email address) with a table of all the employees whose permit is about to expire instead of one email per employee. Please help !

Sample of google sheet format

function emailReminderAlert() {

  // getting data from spreadsheet
   var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
   var startRow = 2; // Ignore the cloumn hedings and freezed rows
   var numRows = sheet.getLastRow() - 1; // Get the last number of row that has content with excluding header rows
   var numColumns = sheet.getLastColumn(); // Get the last number of column that has content.

  //Get data range dynamically
  var dataRange = sheet.getRange(startRow, 1, numRows, numColumns);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    //console.log(row[3]);
    var today = new Date(), // today's date
    exp_date = row[3] // exp date

    var cert_details = 
        {
          employee_name:row[0],
          passport_number:row[1],
          renewal_date: row[2],
          email_primary:row[4],
        };

    //Remove the time part from the date
    var t2 = new Date(exp_date);
    t2.setHours(0,0,0,0);
    var t1 = new Date(today);
    t1.setHours(0,0,0,0);

    //Calculate the ms difference between two date
    var difference_ms = Math.abs(t2.getTime() - t1.getTime());
    // 24*3600*1000 is milliseconds in a day
    var days_left = Math.round(difference_ms/(24*3600*1000));

    //Put the days_left to cert_details array
    cert_details.days_left = days_left;
    cert_details.exp_date = Utilities.formatDate(new Date(exp_date), "GMT+1", "dd/MM/yyyy")

    
    if (days_left == 30) {
      console.log(cert_details.employee_name+"'s permit is expiring in 30 days");
     sendEmail(cert_details);
    }

sendEmail(cert_details);
/*
    else if (days_left == 3) {
      console.log(cert_details.employee_name+" expired in 3 days");
      sendEmail(cert_details);
    }
    else if (days_left == 7) {
      console.log(cert_details.employee_name+" expired in 7 days");
      sendEmail(cert_details);
    }
    else if (days_left == 30) {
      console.log(cert_details.employee_name+" expired in 30 days");
      sendEmail(cert_details);
    }

*/
  }
}



function sendEmail(cert_details){


  //Get the html email template
  var templ = HtmlService.createTemplateFromFile('EmailTemplatetest');
  templ.cert_details = cert_details;

  var message = templ.evaluate().getContent();

  MailApp.sendEmail({
    to: cert_details.email_primary,
    subject: "Permit Expiry Reminder: "+cert_details.employee_name+"'s permit expires in " +cert_details.days_left + " day(s)",
    htmlBody: message
  });
}


Can't you just do

// I am taking 10 just for example
if(parseInt(cert_details.days_left) < 10 ){
  MailApp.sendEmail({
    to: cert_details.email_primary,
    subject: "Permit Expiry Reminder: "+cert_details.employee_name+"'s permit expires in " +cert_details.days_left + " day(s)",
    htmlBody: message
  });
}
else{
// do something else
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM