首页 > 解决方案 > 是否可以在没有活动电子表格的情况下每天使用时间驱动触发器运行函数?

问题描述

我有一个功能可以在调用时更新单元格并发送电子邮件。我想每天运行它而不必打开电子表格(getActiveSpreadsheet()方法)。

所以我尝试使用服务器端方法来调用它openById()。但是当电子表格未打开时,该功能不会触发。

有没有办法在电子表格关闭的情况下运行它?

这是代码:

function updateNote() {
var ss = SpreadsheetApp.openById("MySpreadsheetID");
//do things
};`

function createTimeDrivenTriggers() {
// Trigger fonction everyday at 10.35am   
  ScriptApp.newTrigger('updateNote')
      .timeBased()
      .atHour(10)
      .nearMinute(35)
      .everyDays(1)
      .create();
};

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


回答:

您可以创建一个每天运行的可安装触发器,而无需打开电子表格。

细节:

使用基于时间的可安装触发器,您可以让您的函数每天运行,尽管根据文档

时间可能会稍微随机化——例如,如果您创建一个重复的上午 9 点触发器,Apps 脚本会选择上午 9 点到 10 点之间的时间,然后每天保持该时间一致,以便在触发器再次触发之前经过 24 小时.

如果这对您来说不是问题,那么您可以从应用程序脚本编辑器为您的项目执行此操作 - 按照Edit > Current project's triggers将在新选项卡中打开项目触发器页面的路径。

在左下角,单击+ Add Trigger按钮以调出Add Trigger模式 - 使用以下属性:

  • 选择要运行的函数:updateNote()
  • 选择应该运行的部署:Head
  • 选择事件源:Time-driven
  • 选择基于时间的触发器类型:Day timer
  • 选择一天中的时间:10am to 11am

如果恰好在 10:35 运行对您很重要:

您可以按照与上述相同的步骤进行操作,但属性略有不同:

  • 选择要运行的函数:createTimeDrivenTriggers()
  • 选择应该运行的部署:Head
  • 选择事件源:Time-driven
  • 选择基于时间的触发器类型:Day timer
  • 选择一天中的时间:9am and 10am

这样,您将创建基于时间的触发器,使其每天在 10:35 运行,始终在触发器需要触发之前运行。

参考:


推荐阅读