Скрипт приложения Google отправляет электронную почту, когда в листе нет изменений - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь реализовать уведомление по электронной почте в электронной таблице Google, когда в листе нет изменений.

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

function sendEmailAlert2() {

var ss = SpreadsheetApp.openById("MyID");
var sheetname = ss.getSheetByName("Sheet1");
var Toemail = 'email@gmail.com';
var subject = 'New Entry -' + ss.getName();
var body = 'Your file has a new entry in - ' + sheetname + ' Updated by - ' +
' check file- ' + ss.getUrl();
  MailApp.sendEmail(Toemail,subject, body);

}

Мне нужно условие для этого сценария, когда мой лист не редактировался в этот день. Может быть, у кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Этого можно добиться, внедрив функцию onEdit, которая вставляет новую метку времени в лист каждый раз, когда файл редактируется.И затем, в вашей функции sendEmailAlert2 (), вы можете реализовать проверку условия if, если текущий день равен дню последней отметки времени (то есть дню последнего редактирования).Если сегодня изменений не было, будет отправлено письмо со скриптом.

function onEdit(e) {
    SpreadsheetApp.getActive().getActiveSheet()
        .getRange('A1')
        .setValue(new Date());    
}

function sendEmailAlert2() {

var ss = SpreadsheetApp.openById("MyID");
var sheetname = ss.getSheetByName("Sheet1").getName();
var Toemail = 'email@gmail.com';
var subject = 'New Entry -' + ss.getName();
var body = 'Your file has a new entry in - ' + sheetname + ' Updated by - ' +
' check file- ' + ss.getUrl();
var NoEditSubject = 'No new Entry in' + ss.getName();
var NoEditBody = 'Your file has no new entry in - ' + sheetname +  ss.getUrl();
if(sheetname.getRange('A1').getValue().getDay()==new Date().getDay())
 {
   MailApp.sendEmail(Toemail,subject, body);
 }
else
 {
  MailApp.sendEmail(Toemail,NoEditSubject, NoEditBody); 
 }  
}
1 голос
/ 08 июля 2019

Со своей стороны, я бы порекомендовал вам воспользоваться сервисом DriveApp и проверить, чтобы дата последнего обновления превышала 24 ч.

function getAlertedIfNoChange(){
  var id = 'ID_SHEET';
  var file = DriveApp.getFolderById(id);

  var date = file.getLastUpdated();
  var lastUpdated = date.getTime();

  var today = (new Date()).getTime();
  var delta = (24 * 60 * 60 * 1000)- (10*60*1000)
  if((today - lastUpdated) > delta){
    //Fire alert
    Logger.log('No update during the last 24h')
  }
}

Для «дельты» вы должны установить 24 ч в миллисекундах ипо своему опыту я рекомендую вам удалить несколько минут, потому что при установке триггера на запуск каждый день он не будет срабатывать в одно и то же время.Удаляя несколько минут до 24 часов, вы уверены, что он сработает.

Вы запрограммируете триггер на запуск каждый день, и он будет в порядке.

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