谷歌电子表格时间驱动的事件不会触发

时间:2012-05-11 17:20:07

标签: google-sheets google-apps-script

你好,Stack Overflow上的精彩电影。

我写了一个小脚本,从电子表格中提取引文并通过电子邮件发送给用户。我们的想法是,该脚本每天运行一次,在电子表格中提取下一个引号并将其发送到电子邮件地址。

脚本如下所示:

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 = "myemail@email.com";     // 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 |时间驱动|日计时器|晚上7点到晚上8点

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

我在理解Time-Driven触发器时也遇到了一些问题。 “晚上7点到晚上8点”是什么意思?在这两个小时之间的一个随机时间?

如果我不必登录Google文档,该脚本才有意义。也许我在这里完全误解了一些问题......如果我登录Google Docs,脚本是否只能运行? (但即使我现在,脚本也不会使用Time-Driven触发器执行。)

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

2 个答案:

答案 0 :(得分:2)

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

您无需使用Google文档(甚至完全通过身份验证),您的脚本触发器就可以成功运行。

此外,它会帮助(特别是在调试时)使用立即通知脚本失败。在设置计时器的位置,单击通知链接进行设置。

答案 1 :(得分:0)

除了mzimmerman的回答

  

我在理解Time-Driven触发器时也遇到了一些问题。   “晚上7点到晚上8点”是什么意思?   这意味着你的脚本将在晚上7点到晚上8点之间的任何时间执行,但根据我的观察,它会在晚上7点之后执行。