2012-05-11 213 views
2

你好,你堆栈溢出罚款。谷歌电子表格时间驱动事件不会触发

我写了一个小脚本,它从电子表格中拉出报价并通过电子邮件发送给用户。这个想法是,脚本每天运行一次,将电子表格中的下一个报价拉到电子邮件地址。

脚本是这样的:当我手动运行它

function sendEmails() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 1000; // Number of rows to process 
    var dataRange = sheet.getRange(startRow, 2, numRows, 3); 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    if(row[2]=="yes") { 
     continue; 
    } 
    var emailAddress = "[email protected]";  // email to send to 
    var message = '"'+row[0]+'"'+"\n\n"+"- "+row[1];  // Second column 
    startRow = parseInt(startRow)+parseInt(i); 
    var subject = ""; 
    MailApp.sendEmail(emailAddress, subject, message); 
    sheet.getRange(startRow,4).setValue("yes"); 
    SpreadsheetApp.flush(); 
    break; 
    } 
} 

该脚本工作正常。

现在我添加了一个脚本触发,看起来像这样:

sendEmails |时间驱动| Day Timer |晚上7点到晚上8点

不幸的是,该函数没有执行并且报价没有被发送。

我对理解时间驱动触发器也有点问题。 “晚上7点到晚上8点”是什么意思?在随机时间的两个小时之间一次?

如果我不必登录Google文档,该脚本才有意义。也许我在这里完全误解了一些东西......如果我登录Google文档,脚本是否可用? (但即使我是,截至目前,脚本也不会使用Time-Driven触发器执行)。

我非常感谢您对此的看法。 Moritz

回答

2

从定时器/事件运行脚本时,没有“ActiveSpreadsheet”。而不是使用.getActiveSpreadsheet()使用.openById()

您不需要在Google Docs中(甚至根本没有进行身份验证)脚本触发器可以成功运行。

此外,这将有助于(特别是在调试时)使用即时通知脚本失败。在设置计时器的地方,点击通知链接进行设置。

+0

非常感谢。实际上它可以和.getActiveSpredsheet()一起工作,现在定时器也可以工作。由于时区的不同,它只有一个小时的时间。 – user1389974

0

除了从mzimmerman

回答我也有一点了解的时间驱动触发的问题。 “晚上7点到晚上8点”是什么意思? 这意味着您的脚本将在下午7点到8点之间的任意时间执行,但根据我的观察,它会在晚上7点后执行。

+0

感谢您的帮助。 – user1389974

相关问题