2017-05-27 28 views
0

我不知道GAS,我嘗試搜索很多代碼,發現一個非常接近。如果工作表中的IMPORTED DATA更改,則通知電子郵件。 [觸發器不工作]

我希望在當前工作表中的數據發生變化時收到電子郵件通知。 現在,當我進行更改時,我收到一封電子郵件。這是很好的,但我不會讓實際,因爲數據是從另一片/網站

基本上我想進口更改表

  1. 收到通知時,有導入數據的更改。沒有人會編輯這個。
  2. 在電子郵件的一端連接一個常駐Excel表單與電子郵件
  3. ,受影響的行的總數= + -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 = "[email protected]"; 
    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); 
}; 
+0

我認爲onEdit()只發生在用戶進行更改時。我會考慮使用側邊欄和javascript setTimeout()函數每隔幾秒輪詢一次該值,並跟蹤PropertiesService中的過去值,或者使用JDBC跟蹤單獨的文件或甚至數據庫。 – Cooper

+0

@cooper我們可以在工作表中使用= counta(),並在數字更改時發送通知。但我不知道我將如何製作這個程序。我不知道天然氣實際上 – Ashwendra

+0

那麼你仍然必須使用觸發器來啓動發送,大多數簡單的觸發器都需要用戶採取一些行動。檢查文檔。閱讀[入門部分](https://developers.google.com/apps-script/guides/triggers/)。如果您從表單提交中獲得更改,那麼您可以使用onFormSubmit事件。 – Cooper

回答

0

繼庫珀的想法之後:

使用屬性服務來存儲列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); 
    } 
} 
+0

嘿@James這段代碼只適用於一次,不是再次發生,我不知道發生了什麼 – Ashwendra

+0

您正在測試的列中的數據類型是什麼?如果是時間和日期,那麼關於代碼將不起作用。你能分享一個樣本電子表格嗎? –

+0

我在上面附上了一張虛擬表格,其中有導入數據的行和列。數據是字母數字,根本沒有時間戳。 – Ashwendra