2

你好,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;
  }
}

当我手动运行该脚本时,它运行良好。

现在我添加了一个如下所示的脚本触发器:

发送电子邮件 | 时间驱动 | 日间计时器 | 晚上 7 点到 8 点

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

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

仅当我不必登录 Google Docs 时,该脚本才有意义。也许我在这里完全误解了一些东西......脚本只有在我登录到谷歌文档时才有效吗?(但即使我是,到目前为止,脚本也不会使用时间驱动触发器执行)。

我非常感谢您对此的想法。莫里茨

4

2 回答 2

2

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

您不需要在 Google Docs 中(甚至根本不需要经过身份验证),您的脚本触发器也能成功运行。

此外,使用即时通知脚本失败会有所帮助(尤其是在调试时)。在您设置计时器的位置,单击通知链接进行设置。

于 2012-05-11T17:45:16.203 回答
0

除了来自 mzimmerman 的回答

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

于 2012-05-11T18:51:05.257 回答