Home > Software engineering >  Finetune google sheets script
Finetune google sheets script

Time:07-07

I need to fine tune the script, [0] is clients name, [5] are expiry dates, [6] my mail. The script should automatically check every day at 8 am, and send auto mails if something is expired. The mail should be sent 15 days before expiry date [5], and should be sent only 1 time when reach expiry. With this seems to work with no errors, but something isn't right. Thank you for your help

function alertSender() {
  var today = new Date();
  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet => {
    var values = sheet.getDataRange().getValues().filter(r => r[0] != '');
    for (n = 1; n < values.length;   n) {
      var cell_date = values[n][5];
      var expired = (cell_date - 15 * 86400000) > today;
      if (expired) {
        MailApp.sendEmail(values[n][6], 'Mail automatica scadenza', 'Polizza scaduta per il sig. '   values[n][0]);
        Logger.log('Mail inviata all\'indirizzo '   values[n][6]   ' del sig. '   values[n][0]);
      }
    }
  })
}

CodePudding user response:

Add "SENT" on cell H1 of each tab. Colmn H will receive the date of email sending. This date will be tested to prevent recurrences.

Try

function alertSender() {
  var today = new Date();
  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet => {
    var values = sheet.getDataRange().getValues()
    values.forEach(r => {
      if (r[0] != '' && r[7] == '') {
        var cell_date = new Date(r[5]);
        var expired = (cell_date <= new Date(today.getTime()   15 * 86400000));
        if (expired) {
          MailApp.sendEmail(r[6], 'Mail automatica', 'Servizio scaduto per il sig. '   r[0]);
          Logger.log('Mail inviata all\'indirizzo '   r[6]   ' del sig. '   r[0]);
          r[7] = Utilities.formatDate(today, Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm")
        }
      }
    })
    sheet.getDataRange().setValues(values)
  })
}

to get the exact date, you can try

var expired = (cell_date.valueOf() == new Date(today.getFullYear(), today.getMonth(), today.getDate()   15).valueOf())
  • Related