【问题标题】:Google Spreadsheet time-driven event doesn't fireGoogle 电子表格时间驱动的事件不会触发
【发布时间】:2012-05-11 17:20:06
【问题描述】:

你好,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 点”是什么意思?在这两个小时之间随机出现一次?

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

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

【问题讨论】:

    标签: google-sheets google-apps-script


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。实际上它确实可以与 .getActiveSpredsheet() 一起使用,并且计时器现在也可以使用。由于时区不同,只休息一个小时。
    【解决方案2】:

    除了来自 mzimmerman 的回答

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多