【问题标题】:Why a Macro in Google Sheets works fine when I run it, but not when I schedule it with a simple daily time trigger?为什么当我运行 Google 表格中的宏时它运行良好,但当我使用简单的每日时间触发器安排它时却不行?
【发布时间】:2020-06-26 21:42:28
【问题描述】:

我最近在 Google 表格中创建了一个宏,经过多次反复试验后,它可以完美且始终如一地工作。通过在 Google 表格文件中选择宏,我已经尝试了近 100 次,从未失败过。

但是,我想安排宏每天运行一次,以便从中获得最大的功能。因此,使用 Google Apps 脚本,我为宏添加了一个触发器,其中包含以下详细信息:“Head” 在部署时运行; “时间驱动”事件源; “日计时器” 类型的基于时间的触发器; “凌晨 1 点到凌晨 2 点” 一天中的某个时间。

但是,每次触发宏自动运行时,它都失败了,每次在凌晨 1:40 给我一个错误通知,错误消息是:“异常:行组不存在索引 19 和组深度 1。”

我相信这是参考宏的第一部分(它使用绝对单元格引用,而不是相对),其中我取消折叠某组行(从第 19 行开始)然后取消组合它们。同样,当我自己在 Google 表格中单击以运行完全相同的宏时,这非常有效,所以我无法理解可能是什么问题导致它在被时间触发时无法成功运行。

任何帮助将不胜感激。非常感谢!

【问题讨论】:

  • 欢迎来到Stack Overflow。您是如何创建“宏”的?你用过谷歌表格宏记录器吗?您是否将脚本作为 Google 表格宏导入?
  • 另外,如果您添加minimal reproducible example,这将非常有帮助。

标签: google-apps-script google-sheets triggers


【解决方案1】:

当您运行脚本时,很可能您在 Web 浏览器中打开了电子表格,因此像 SpreadsheetApp.getActiveSheet() 这样的方法会根据您打开的工作表、选择的单元格等返回相应的对象,但是当一个由时间驱动的触发器调用的函数运行 SpreadsheetApp.getActiveSheet() 返回第一个工作表,其他方法可能返回与您预期不同的内容。

【讨论】:

  • 知道了!非常感谢!所以只是为了澄清,你说的问题可能是当我自己运行宏时,我已经在正确/预期的工作表上。但是,当宏通过基于时间的触发器运行时,它将在文件的第一个工作表上运行(在这种情况下,不是我希望它运行的工作表),这就是为什么它搞砸了?
  • 那么,如果是这样的话——有没有办法将代码从“SpreadsheetApp.getActiveSheet()”更改为一些知道在我选择的工作表中操作的代码?有没有办法把它编码进去?非常感谢您的帮助!
  • 您可以将getActiveSheet() 替换为getSheetByName(name),但我不知道这是否足够。我建议您创建一个minimal reproducible example,然后如果您仍然需要帮助,请发布一个包含代码的新问题。
猜你喜欢
  • 2022-01-10
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多