【发布时间】:2017-03-10 18:13:43
【问题描述】:
我正在编写一个代码,旨在通过电子邮件通知我网站上的值是否发生变化。为此,我使用了 4 个函数:
- 函数 1 执行函数 2-4
- 函数 2 是一个刮刀
- 函数 3 将数据写入电子表格的新行中
- 函数 4 比较新写入的行,如果新行与之前不同,则发送一封电子邮件。
功能一每 5 分钟自动触发一次。电子表格显示触发器适用于功能二和三(抓取并将数据保存到电子表格),电子表格每五分钟更新一次。但是,当事情发生变化时,我不会收到电子邮件。
当我手动执行功能一时,它可以工作,包括在数据更改时发送电子邮件。我试图添加一个额外的触发器来执行比较数据并发送电子邮件的功能。然而,这也没有导致电子邮件被发送给我。
如果重要:数据大约每小时更改一次。但是,我想尽快得到通知,因此经常检查
你有什么想法,为什么发送电子邮件的触发器不起作用,你有什么解决办法吗?
提前致谢!
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("ab@gmail.com", invest + "blablabla", "blablabla");
// Logger.log('not equal');
}
}
【问题讨论】:
-
我找到了解决方案:getUi() 函数显然导致了问题。因为我不需要它(它是旧函数遗留下来的),所以我删除了它,脚本现在可以自动运行。还是谢谢!
标签: email google-apps-script triggers