2017-03-10 109 views
1

我正在编写一个代码,旨在通过电子邮件通知我网站上的值是否更改。为了做到这一点,我使用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'); 
    } 
    } 
+0

我找到了解决方案:getUi()函数显然导致了问题。由于我不需要它(它是从一个旧功能中遗留下来的),我将它删除了,现在脚本自动运行。 还是谢谢! – JSS

回答

0

尝试在SendEmail()函数的最后一行改变MailAppGmailApp

+0

尝试在sendData和SendEmail()之间放置flush()。 – Cooper

+0

OP使用错误的类。其实际上是GmailApp而不是MailApp。 –

+1

如果是这样的话,我想这个函数也不应该手动工作。 – JSS

0

我发现解决方案:getUi() - 函数显然导致了问题。一些研究表明,getUi()函数仅适用于打开相关表单的情况。

因为我不需要函数(它是从旧函数中遗留下来的),所以我删除了它,现在脚本自动运行。谢谢!

相关问题