我正在編寫一個代碼,旨在通過電子郵件通知我網站上的值是否更改。爲了做到這一點,我使用4個功能:Google Apps腳本:觸發器不適用於發送電子郵件
- 功能的一個執行的功能2-4
- 功能2是刮板
- 功能3在一個新的線在電子表格中的數據寫入
- 功能4比較新寫入的行,並在新行與以前不同時發送電子郵件。
功能一每5分鐘自動觸發一次。電子表格顯示觸發器對於函數二和三(對數據進行刮擦並將數據保存到電子表格)正常工作,電子表格每五分鐘更新一次。但是,如果發生變化,我不會收到電子郵件。
當我手動執行功能1時,它可以工作,包括數據發生變化時發送的電子郵件。我試圖添加額外的觸發器來執行比較數據併發送電子郵件的功能。但是,這也沒有導致電子郵件被髮送給我。
如果很重要:數據每小時更換一次。然而,我想盡快得到通知,因此經常檢查
你有什麼想法,爲什麼發送電子郵件的觸發器不起作用,你有什麼解決方案嗎?
在此先感謝!
function scrape_save_send(){
getData();
saveData();
SendEmail();
}
function getData() { // works just fine, code cut to make it not too long
[...]
}
function saveData() { // works fine both automatically and manually
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([new Date(), getData()]);
var lrow = sheet.getLastRow();
sheet.getRange(lrow,3).setFormula('=SPLIT(B'+lrow+'; "abcdefghijklmnopqrstuvwxyz=<>- /")') // workaround to extract a number from the scraped content
}
function SendEmail() { // works just fine if executed manually
Utilities.sleep(2000) // delays the check
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var ui = SpreadsheetApp.getUi();
if (sheet.getRange(sheet.getLastRow()-1,2).getValue() === sheet.getRange(sheet.getLastRow(),2).getValue()) {
Logger.log('equal');
} else {
var invest = sheet.getRange(sheet.getLastRow(),8).getValue();
MailApp.sendEmail("[email protected]", invest + "blablabla", "blablabla");
// Logger.log('not equal');
}
}
我找到了解決方案:getUi()函數顯然導致了問題。由於我不需要它(它是從一箇舊功能中遺留下來的),我將它刪除了,現在腳本自動運行。 還是謝謝! – JSS