Google应用程序脚本在工作表没有更改时发送电子邮件

时间:2019-07-08 08:24:01

标签: google-apps-script google-sheets-api

当表格没有更改时,我正在尝试在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 个答案:

答案 0 :(得分:2)

您可以通过实现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 :(得分:1)

在我这边,我建议您使用DriveApp服务,并检查“上次更新”的日期是否高于24h。

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小时内删除几分钟,您可以确定它会发出警报。

您将触发器编程为每天运行,就可以了。