Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 时间驱动触发器工作不正常_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Google apps script 时间驱动触发器工作不正常

Google apps script 时间驱动触发器工作不正常,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,我们正在使用电子表格和应用程序脚本来实现自动化,因此我们在应用程序脚本仪表板中设置了一些基于时间的触发器、一些基于小时的触发器、一些基于每日的触发器。触发器不运行的情况越来越频繁。它们只是没有执行,所以我在仪表板中没有看到任何失败(因为代码是有效的) 我想,这是关于.getActiveSpreadSheet()方法的,当工作表不打开或不可见时,该方法可能不起作用(大多数情况下都是这样),但我最近有一个工作表,我通过id(openById)打开它,触发器仍然可以按照他喜欢的方式工作 简单的示例代码

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

我想,这是关于.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”)甚至可以在封闭的工作表上工作吗?是否要在浏览器中打开并激活图纸?我们已经使用电子表格和应用程序脚本好几个月了,我每次都使用getActiveSpreadsheet.getSheetByName(“ha”),而且效果很好。看来,时间驱动的触发器是有缺陷的atm,我没有其他结论(因为代码和其他一切都是有效的)

有没有办法找出为什么触发器没有触发(除了代码错误之外,我当然会在仪表板上看到)。 如果我使用程序触发器,这些问题也会发生吗

提前谢谢

下面是问题的图像(在这些运行期间,代码或触发器中没有任何更改):
回答您的一些问题

  • 正如时间驱动触发器的“时间可能会稍微随机-例如,如果您创建一个重复的上午9点触发器,应用程序脚本将选择上午9点到上午10点之间的时间”
  • 如果改为使用参数
    nearMinute(minute)
    手动创建触发器,则这“指定触发器运行的分钟数(正负15分钟)”。换句话说:你不能期望应用程序脚本中的触发器在你想要的时间精确运行
  • SpreadsheetApp.getActiveSpreadsheet()
    如果您有一个绑定的脚本,而不是一个独立的脚本,那么它就可以工作。在任何情况下,为了避免错误源,明智的做法是使用
    SpreadsheetApp.openById(id)
    而不是
    SpreadsheetApp.getActiveSpreadsheet()
  • 你可以监督你的触发器,但是从你的描述来看,似乎触发器被正确地触发了,只是不完全是在你想要的时间
    谢谢你的回答,但是你看到照片了吗?如果我通过仪表板或编程设置触发器每分钟触发一次,那么当然它必须每(!)分钟触发一次!我真的不在乎一分钟中的哪一秒。但正如你所看到的,它根本没有开火。这只是为了测试,我设置了其他人每小时开火,他们有时也不工作。我不明白他们为什么没有被处决。正如我提到的,检查执行和我的触发器是毫无意义的,因为一开始没有执行任何操作(如图中所示)。我试图在回答中指出,即使你设置了一个每分钟触发一次的时间触发器,也没有必要这样做——正如谷歌指定的那样,可能会有明显的延迟。根据你的解释和截图,我假设你没有失败的执行,只有不按时发射的执行?在基于时间的触发器上复制您的样本,我不会遇到任何问题。可能还有其他问题,例如干扰其他触发器?请记住,有一些限制,例如触发器每天的总运行时间。当然,我明白了。这正是重点:我看不到执行情况,因为它们根本没有被执行/触发。每小时触发一次的不同触发器也会发生这种情况(因此它不限于1分钟的触发器,我只是用来测试真正的触发器行为)。因此,没有失败的尝试。即使我们会遇到限制,我们也应该得到异常,就像您的文章(异常消息)中所写的那样。但是没有。所以我一点也不知道错误发生在哪里。你总共有多少个不同的时间触发器,每天的总运行时间是多少?如果您有一个消费者帐户,并且您的总触发器运行时间(对于与您的帐户相关的所有触发器)每天超过90分钟,则可能会跳过一些执行,而不会引发异常。我们使用Gsuite Business,因此我认为,我们不会超出此处的配额。我也很确定,我没有超过20个触发器用于每个脚本(这在各个方面都很糟糕)。问题是,我不知道为什么它没有执行。每小时运行另一个脚本,该脚本在今天04:28、05:28、07:28、08:28执行。所以06:28不见了。当然,执行过程中没有错误,根本就没有。但我会清理一些旧的东西,脚本,触发器等,也许这会有所帮助。有没有办法查一下我现在的qutoa?在这方面我找不到任何东西。