【问题标题】:Google app script send email when sheet have no changes当工作表没有更改时,Google 应用脚本发送电子邮件
【发布时间】:2019-07-08 08:24:01
【问题描述】:

当工作表没有更改时,我正在尝试在 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);

}

当我的工作表在这一天没有被编辑时,我需要这个脚本的条件。 也许有人有任何想法?

【问题讨论】:

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


    【解决方案1】:

    您可以通过实现一个 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); 
     }  
    }
    

    【讨论】:

      【解决方案2】:

      我建议您使用 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 小时,您确定它会触发警报。

      您编写一个触发器每天运行,它会没问题的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 2023-01-20
        • 2020-05-10
        • 2020-04-14
        相关资源
        最近更新 更多