问题标签 [gs-installable-triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2092 浏览

google-apps-script - 匿名用户不会显示 Google 电子表格自定义菜单

我注意到 Google 电子表格* 自定义菜单(见下面的代码)不会显示给匿名用户,即直接从 URL 访问电子表格的用户(共享链接);你需要先签名。
*电子表格是共享的,权限是“任何知道链接的人都可以编辑”。

这是预期的行为吗?
是否有任何解决方法可以让用户无需先登录即可使用自定义菜单?

代码(来自谷歌)**:

**onOpen 函数已重命名为 myOnOpen 并与可安装触发器相关联。我已经验证它在电子表格所有者的上下文中运行。

TIA,

奥利维尔

0 投票
2 回答
12327 浏览

google-apps-script - Google 脚本错误:您无权调用 openById

我正在尝试使用以下谷歌脚本发送一封邮件,并附上我的谷歌驱动器中可用的文件

当我手动运行上面的脚本时,它运行良好,电子邮件被发送。但是当我使用表单提交触发器运行它时,它会给出错误“您无权调用 openById”

会重现问题的步骤?

  1. 创建一个谷歌表单。
  2. 在脚本编辑器上编写上述脚本并添加一个提交表单的触发器。
  3. 填写并提交表格,然后您将收到来自“apps-scripts-notifications@google.com”的邮件中的上述错误

请帮忙。

0 投票
2 回答
13679 浏览

google-apps-script - 您无权执行该操作

我有一个时间触发的脚本,它定期从外部来源检索内容并用它更新 Google 网站页面。据此,脚本应该在我的帐户下运行,该帐户对该 Google 网站页面进行了全面评估(通过手动编辑进行了测试)。但是当我运行脚本时,我得到了

您无权执行该操作。

如果我可以手动编辑页面,为什么我在运行脚本时没有该权限?

这是(通用)脚本函数:

0 投票
1 回答
786 浏览

javascript - Google Script onChange 第 3 方 INSERT_ROW

一年多来,我一直试图找到一个明确的答案。希望你们中的一个人有一个解决方案。

添加新行时,我需要一个简单的脚本来触发。而已。我自己和试图帮助我的每个人都面临的唯一问题是它来自第 3 方来源(表格)。

第 3 方来源在提交时在工作表中添加了一个新行,但触发器不会触发!为什么?现在,我正在运行一个简单的日志测试,以查看它是否在编辑和/或更改时更新,到目前为止,两者都没有。有人可以解释这是为什么吗?我搜索了整个互联网以找到解决方案,但没有找到。

第 3 方表单是通过 Formstack 生成的,它没有理由不应该在 Sheets 中触发,因为正在添加一个新行!

下面是我用来查看它是否在编辑或更改时触发的简单函数:

0 投票
2 回答
9297 浏览

google-apps-script - 插入新行时在谷歌电子表格上触发脚本

我正在谷歌电子表格上运行一个脚本,它应该由来自 Zapier (www.zapier.com) 的 zap 的 onChange() 事件(当在电子表格中插入新行时)触发。我可以在电子表格中看到正在创建的新信息,但未触发触发器。我已经使用 onEdit() 事件进行了测试,但它不起作用。它不应该是基于时间的触发器。

有什么建议么?

0 投票
0 回答
850 浏览

google-apps-script - Google Apps 脚本:同时调用太多

我在工作表上设置了一个触发器,该触发器设置为在提交关联表单时运行。奇怪的是,这似乎曾经奏效过一次,但在所有其他时间我都通过电子邮件收到了这个失败摘要:

太多同时调用:电子表格(第 20 行,文件“代码”)

有问题的行是:

在上下文中,这就是我正在做的事情:

提前感谢您的任何建议...

更新 - 虽然我没有改变任何东西,但这开始持续工作了一段时间。我想知道这是否与配额限制有关?从那以后它又停止工作了!

0 投票
1 回答
2298 浏览

google-apps-script - 复制模板电子表格脚本时,可在谷歌电子表格脚本中安装 onEdit 触发器

我有一个复制模板电子表格的脚本(A)。此模板电子表格中有一个脚本(B)。模板电子表格和脚本以编程方式成功复制并与他人共享。模板脚本需要使用 onEdit() 触发器来修改第三个电子表格(模板电子表格副本中的编辑将同步到第三个电子表格)。简单触发器无权访问第三个电子表格。我曾尝试使用可安装触发器,但没有成功让可安装的 onEdit 触发器在复制的电子表格中工作。

我想要实现的是在复制的电子表格中有一个 onEdit 触发器,不需要单独授权即可写入第三个电子表格。

所有电子表格都归一个用户所有。

我可以使用脚本 A 中的以下代码在脚本 B 中创建可安装触发器。

“myOnEdit”函数位于脚本 B 中,其中包含与第三个电子表格同步的代码。编辑复制的电子表格时不会触发此操作。

如果我通过从简单的 onOpen() 函数调用它在脚本 B 中创建可安装触发器,它会因为权限而失败。

遵循此处的建议:执行失败:您无权调用 getProjectTriggers 我可以创建可安装触发器和一个菜单项来调用它,以及一个提示用户单击安装并授权触发器的 msgbox。

在复制有权编辑第三个电子表格的电子表格时,是否可以以编程方式安装 onEdit 触发器,而无需用户手动授权触发器?

提前谢谢了

特雷弗·斯托尔

0 投票
1 回答
2518 浏览

javascript - 在 gmail 中动态设置谷歌脚本时间驱动的计时器和太多的计时器错误

我正在使用 gmail 的谷歌脚本来创建一个脚本,该脚本将标记超过 150 天的电子邮件将被删除。因为脚本会在 x 时间后超时,所以我会在该时间之前处理尽可能多的电子邮件,然后为脚本设置一个新触发器,以便在 2 分钟后继续运行。

我担心的是,在设置并运行新触发器后,即使它是特定的日期和时间触发器,它仍会显示在“当前应用程序触发器”中。如果这种情况在一段时间内经常发生,例如一个月,是否会导致此错误:

'这个脚本有太多的触发器。必须先从脚本中删除触发器,然后才能添加更多触发器。

还是会在某个时候自动删除过期的特定日期和时间触发器?

有谁知道这种情况的最佳做法?

0 投票
4 回答
47968 浏览

google-apps-script - 定期刷新 IMPORTXML() 电子表格函数

我有一张大表,其中包含大约 30 个importxml函数,这些函数从通常每天更新两次的网站获取数据。

我想importxml及时(每 8 小时)运行该功能,以便我的 Google 电子表格将数据保存在另一张工作表中。保存已经有效,但是更新无效!

我在Google 电子表格行更新中读到它可能每 2 小时运行一次,但我不相信这是真的,因为自从我将它添加到我的工作表中,当电子表格未打开时,没有任何更改或更新。

我如何importxml以一种简单的方式“触发”我的 Google 电子表格中的功能,因为其中有很多importxml功能?

0 投票
3 回答
32141 浏览

google-apps-script - “无法从此上下文中调用 SpreadsheetApp.getUi()”

在 Google 表格电子表格中,我想显示一个从 HTML 创建的模式对话框,然后运行一个函数,然后自动关闭该 HTML 提示。

对话框应该一直停留到函数完成执行,然后自动消失。

这个过程必须每 3 小时重复一次,并且脚本需要像我一样运行(因为我有其他用户没有的编辑权限)所以简单的触发器可能不起作用(我读过你必须创建一个可安装的触发器如果您希望该功能以您的身份运行,而不是当前用户在给定时间的任何人)

我目前有:

  1. .gs 函数 Magic_Telling,使用 HTML 文件创建模式对话框
  2. 一个 HTML 文件 Prompt_Styling,其中包含提示的 css / html 样式。该 HTML 文件然后调用处理行的 .gs 函数 All_In

我的代码:

Magic_Telling 从 HTML 文件创建模式对话框。


Prompt_Styling HTML 文件,用于样式提示 + 运行将处理行的函数 All_In 的脚本

All_In处理行的函数

当我从脚本编辑器运行 MagicTelling 时,它运行良好。整个序列执行(显示提示,执行 All_In,提示消失)。完美的。

然后,我通过转到 Script Editor > Resources > Current project's triggers 创建了一个可安装的触发器,并添加了一个触发器以每 3 小时运行一次 Magic_Telling。(我认为这是一个“可安装的触发器”)

但我收到此错误消息:

无法从此上下文中调用 SpreadsheetApp.getUi()。

...当函数到达 Magic_Telling 的第一行时

我应该怎么做才能解决这个问题?