时间驱动触发器无法正常工作

问题描述 投票:0回答:2

我们正在使用电子表格和应用程序脚本来实现一些自动化,因此我们设置了一些基于时间的触发器,一些每小时,一些每天,所有这些都在应用程序脚本仪表板中设置。触发器根本不运行的情况越来越频繁地发生。它们只是没有被执行,所以我在仪表板中没有看到任何失败(因为代码是有效的)。

我想,这是关于 .getActiveSpreadSheet() 方法,当工作表未打开或不可见时(在大多数情况下),但我最近有一个工作表,我通过 id 打开它( openById),并且触发器仍然按他的意愿工作。

简单的示例代码是:

function testTrigger(){
 var sheet = SpreadsheetApp.openById($sheetid).getSheetByName("ha")
 sheet.getRange("A1").setValue(new Date());
  Logger.log("test");
}

在我使用之前

function testTrigger(){
 var sheet = SpreadsheetApp.getActiveSpreadsheet.getSheetByName("ha")
 sheet.getRange("A1").setValue(new Date());
  Logger.log("test");
}

此功能的触发器设置为每分钟触发一次。正如我在表中看到的,上次运行时间是 12:35:48,但现在是 12:40。那么为什么它不起作用呢?

当我写这篇文章时,它突然在 12:40:48 触发。但现在又是12点44分了,所以已经少了3趟了!为什么这种情况屡屡发生?

并且:SpreadsheetApp.getActiveSpreadsheet.getSheetByName("ha") 甚至可以使用关闭的工作表吗?该工作表是否在浏览器中打开并处于活动状态?我们使用电子表格和 Apps-Script 已有几个月了,我每次都使用 getActiveSpreadsheet.getSheetByName("ha") 并且它有效。看来,时间驱动的触发器是有缺陷的 atm,我没有其他结论(因为代码和其他所有内容都是有效的)。

有什么方法可以找出为什么触发器没有触发(除了代码错误,我当然会在仪表板中看到)。 如果我使用编程触发器,这些问题也会发生吗?

提前致谢!

这是问题的图像(在这些运行期间代码或触发器中没有任何更改): enter image description here

google-apps-script google-sheets triggers
2个回答
2
投票

回答您的一些问题

  1. 根据时间驱动触发器的文档的规定,“时间可能会稍微随机化 - 例如,如果您创建重复的上午 9 点触发器,Apps 脚本会选择上午 9 点到上午 10 点之间的时间”
  2. 如果您使用参数 nearMinute(minute) 手动创建
    ClockTriggerBuilder
    ,则此“指定触发器运行的分钟(正负 15 分钟)”。换句话说:您不能期望 Apps 脚本触发器在您希望的时间精确运行。
  3. 如果您有绑定脚本而不是单独的脚本,则
  4. SpreadsheetApp.getActiveSpreadsheet()
    可以工作。无论如何,为了避免错误源,明智的做法是使用
    SpreadsheetApp.openById(id)
    而不是
    SpreadsheetApp.getActiveSpreadsheet()
  5. 您可以监督您的触发器和执行我的触发器,但是从您的描述来看,触发器似乎已正确触发,只是不完全在您想要的时间触发。

0
投票

直到两年后我才看到这个......

就像分享我的一个例程,它将在中午 12 点后 1 到 15 分钟(随机)设置一个触发器。启动另一个名为“AutoEmail”的功能:

 var TriggerID = ScriptApp.newTrigger('AutoEmail')
          .timeBased()
          .at(new Date(year, month, day,12, TriggerMinute))  //set hour to 12pm for am trigger
          .create().getUniqueId();

它已经工作了几个月了。 也许您可以尝试在我的“TriggerMinute”变量中修复一分钟并查看结果?

我不是专业程序员,我不知道你是否真的需要最后一行来获取触发器的唯一ID,但我需要它,这样我就可以删除使用过的。

© www.soinside.com 2019 - 2024. All rights reserved.