首页 > 解决方案 > Google Apps 脚本插件:onChange 以编程方式触发,带有误导性权限范围文本

问题描述

根据 Google 文档,onChange电子表格插件的触发器必须通过ScriptApp.newTrigger(...)....

newtrigger需要范围:

https://www.googleapis.com/auth/script.scriptapp

当要求用户授予权限时,显示的文本是:

允许此应用程序在您不在时运行

我知道这个函数可以创建基于时间的触发器,但是对于onChange电子表格中的一个简单的,我会理解用户是否因为该文本而拒绝它。

有没有办法在电子表格中onChange没有这种更改范围(不是onEdit)的触发器?

标签: google-apps-script

解决方案


回答:

以编程方式代表用户创建触发器的唯一方法是使用ScriptApp.newTrigger(),并且此方法需要https://www.googleapis.com/auth/script.scriptapp范围。没有其他范围将允许它运行。

但是,您可以为电子表格设置onChange()触发器,无论谁对表格进行更改,该触发器都会运行。

更多信息:

设置触发器时,您允许应用程序/脚本/函数代表您运行,而无需您手动运行该函数。要求用户创建触发器将要求他们授权他们同意脚本代表他们执行某些操作。

但是,您可以自己设置触发器。只要将在触发器上运行的功能不违反任何可安装的触发器限制,只要它已被您授权运行,它将在工作表上运行。

但请记住,如果您自己设置触发器,脚本将始终以您的身份执行,而不是以用户身份执行。因此,例如,如果函数发送一封电子邮件,那么电子邮件将代表您发送 - 因为您是授权脚本的人。

手动设置可安装触发器:

如果将触发器设置为按您的身份运行是一种可接受的解决方案,您可以按照以下步骤进行操作:

使用保存图标保存脚本,按运行按钮 (►),并确认运行脚本的身份验证。

从这里,在编辑 > 当前项目的触发器菜单项之后,您将在 G Suite 开发者中心打开一个新页面。点击右下角的+添加触发器按钮,设置触发器设置如下:

  • 选择要运行的函数:<your-function-name>
  • 选择应该运行的部署:Head
  • 选择事件源:From Spreadsheet
  • 选择事件类型:On change

然后按保存。

现在,这将在对工作表所做的所有更改上运行 - 无论是谁进行了更改。请记住,就执行而言,您是脚本运行者。

参考:


推荐阅读