如果表格中的IMPORTED DATA更改,则通过电子邮件通知。 [触发器不起作用]

时间:2017-05-27 11:22:03

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

我不知道GAS,我尝试搜索很多代码并发现一个非常接近。

我希望在当前工作表中的数据发生变化时收到电子邮件通知。 现在,当我进行更改时,我收到了一封电子邮件。哪个很好但我实际上不会对工作表进行更改,因为数据是从其他工作表/网站导入的

基本上我希望

  1. 在导入数据发生更改时收到通知。没有人会编辑这个。
  2. 附上包含电子邮件的永久Excel表格
  3. 在电子邮件末尾,受影响的总行数= + -4
  4. 虚拟表:https://docs.google.com/spreadsheets/d/1BTdA7Rx16W6la_gri4uP079yIzzgKfZKO610yfQ6724/edit?usp=sharing [触发器不能处理导入的数据]

    当前脚本:

    function sendNotification() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var cell = ss.getActiveCell().getA1Notation();
      var row = sheet.getActiveRange().getRow();
      var cellvalue = ss.getActiveCell().getValue().toString();
      var to = "ashwendra10625@gmail.com";
      var message = '\n\nSignature';
      if(cell.indexOf('G')!=-1){ 
        message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue()
      }
      var subject = 'Data Updated';
      var body = 'Hi there,\n\nThe data on website was updated recently.\n\nKindly refresh the previous excel sheet or click ' + 'https://docs.google.com/spreadsheets/d/1BTdA7Rx16W6la_gri4uP079yIzzgKfZKO610yfQ6724/edit#gid=0' + ' to see changes.\n\n\nThe changes are:\nTotal Rows affected: ' + row + '\n' + message;
      MailApp.sendEmail(to, subject, body);
    };
    

1 个答案:

答案 0 :(得分:0)

来自库珀的想法:

使用属性服务存储col A中的数据长度值(例如)。创建基于时间的触发器,每隔X分钟检查一次表单。如果数据发生更改,则使用新值更新属性并发送电子邮件。

根据您的数据,您可以选择要测试的任何范围,或者如果您有时间戳,则可以更改代码以测试时间的变化。

function onEdit() {

    var getProps = PropertiesService.getUserProperties();

    var lenProp = getProps.getProperty('Len');

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('-------');

    var data = sheet.getRange('A1:A').getValues().toString().length;

    if (data != lenProp) {
        getProps.setProperty('Len', data);
        MailApp.sendEmail('-------------', 'Sheet Has Changed', 'Previous value: ' + lenProp + ' New value: ' + data);
    }
}