简单触发器

借助触发器,Apps 脚本可在发生特定事件时自动运行函数, 就像打开文档一样简单触发器是 内置于 Apps 脚本中的预留函数,例如函数 onOpen(e), 在用户打开 Google 文档、表格、幻灯片或表单文件时执行。 可安装的触发器提供更多 功能比简单触发器更高,但必须在使用前启用。对于 Apps 脚本会将触发的函数传递 事件对象 有关事件发生时的背景的信息。

使用入门

要使用简单的触发器,只需创建一个函数,并在其中使用下列代码之一 预留的函数名称:

  • onOpen(e) 会在用户打开电子表格、文档、演示文稿或 用户有权编辑的表单
  • onInstall(e) 会在用户安装 使用编辑器插件 Google 文档、表格、幻灯片或表单。
  • onEdit(e) 会在用户更改电子表格中的值时运行。
  • onSelectionChange(e) 会在用户更改电子表格中的选定内容时运行。
  • doGet(e) 会在用户访问 Web 应用时运行 或者某个程序向 Web 应用发送 HTTP GET 请求。
  • 当某个程序向 Web 应用发送 HTTP POST 请求时,doPost(e) 会运行。

上述函数名称中的 e 形参是一个 事件对象,会传递到 函数。该对象包含有关引发 触发器触发,但使用它是可选的。

限制

因为简单的触发器会自动触发,而无需要求用户提供 而受到以下几项限制:

  • 脚本必须绑定到 Google Google 表格、幻灯片、文档或表单文件,也可以是 插件,扩展以下服务之一: 这些应用
  • 如果文件在只读(查看或评论)模式下打开,则脚本不会运行。
  • 脚本执行和 API 请求不会导致触发器运行。例如: 正在呼叫Range.setValue() 编辑单元格不会导致电子表格的 onEdit 触发器运行。
  • 他们无法访问需要 授权。例如: 简单的触发器无法发送电子邮件,因为 Gmail 服务需要授权,但 简单的触发器可以翻译带有 语言服务,匿名。
  • 他们可以修改自己绑定的文件,但无法访问其他文件 因为这需要授权
  • 他们不一定能确定当前用户的身份, 取决于 一组复杂的安全限制
  • 它们的运行时间不能超过 30 秒。
  • 在某些情况下 编辑器插件运行其 onOpen(e) 以及 onEdit(e) 个简单触发器,该触发器在无授权模式下 一些其他的复杂问题。有关详情,请参阅 插件授权生命周期指南
  • 简单触发器受 Apps 脚本触发器的约束 配额限制

这些限制不适用于 doGet(e)doPost(e)

onOpen(e)

onOpen(e) 触发器会在用户打开电子表格时自动运行, 文档、演示文稿或表单。( 触发器在响应表单时不会运行,仅当打开表单 进行修改。)onOpen(e) 最常用于添加自定义 菜单项到 Google 表格、幻灯片、文档或 表单。

triggers/triggers.gs
/**
 * The event handler triggered when opening the spreadsheet.
 * @param {Event} e The onOpen event.
 * @see https://developers.google.com/apps-script/guides/triggers#onopene
 */
function onOpen(e) {
  // Add a custom menu to the spreadsheet.
  SpreadsheetApp.getUi() // Or DocumentApp, SlidesApp, or FormApp.
      .createMenu('Custom Menu')
      .addItem('First item', 'menuItem1')
      .addToUi();
}

onInstall(e)

onInstall(e) 触发器会在用户安装 使用编辑器插件 Google 文档、表格、幻灯片或表单。用户执行下列操作时,触发器不会运行 会从 Google Workspace Marketplace 网站。请注意, onInstall(e)可以执行的操作有一些限制,请详细了解 授权onInstall(e) 最常见的用途是直接调用 onOpen(e) 来添加 自定义菜单毕竟,在安装插件时,文件已经打开, 因此,除非重新打开文件,否则 onOpen(e) 不会自行运行。

triggers/triggers.gs
/**
 * The event handler triggered when installing the add-on.
 * @param {Event} e The onInstall event.
 * @see https://developers.google.com/apps-script/guides/triggers#oninstalle
 */
function onInstall(e) {
  onOpen(e);
}

onEdit(e)

当用户更改任何值时,onEdit(e) 触发器会自动运行 电子表格。大多数 onEdit(e) 触发器都会使用 事件对象做出适当响应。 例如,下面的 onEdit(e) 函数可以在一个单元格中设置注释, 记录上次修改的时间。

triggers/triggers.gs
/**
 * The event handler triggered when editing the spreadsheet.
 * @param {Event} e The onEdit event.
 * @see https://developers.google.com/apps-script/guides/triggers#onedite
 */
function onEdit(e) {
  // Set a comment on the edited cell to indicate when it was changed.
  const range = e.range;
  range.setNote('Last modified: ' + new Date());
}

onSelectionChange(e)

onSelectionChange(e)触发器会在用户更改 在电子表格中选择的选项要启用此触发器,您必须刷新 创建电子表格。

如果所选内容在短时间内在多个单元格之间移动,系统会选择部分单元格 系统可能会跳过更改事件以缩短延迟时间例如,如果有很多选择, 更改会在两秒内相互更改,仅第一次更改和最后更改 选择更改将启用“onSelectionChange(e)”触发器。

在下面的示例中, 如果选中的是空单元格,onSelectionChange(e) 函数会设置该单元格的 背景变成红色。

triggers/triggers.gs
/**
 * The event handler triggered when the selection changes in the spreadsheet.
 * @param {Event} e The onSelectionChange event.
 * @see https://developers.google.com/apps-script/guides/triggers#onselectionchangee
 */
function onSelectionChange(e) {
  // Set background to red if a single empty cell is selected.
  const range = e.range;
  if (range.getNumRows() === 1 &&
    range.getNumColumns() === 1 &&
    range.getCell(1, 1).getValue() === '') {
    range.setBackground('red');
  }
}

doGet(e)doPost(e)

doGet(e) 触发器会在用户访问 Web 应用或程序发送 HTTP GET 请求 Web 应用。doPost(e) 当一个程序将 HTTP POST 请求发送到 Web 应用。关于这些触发因素, Web 应用HTML 服务、 和内容服务。请注意,doGet(e)doPost(e)不受上述限制的约束。

可用的触发器类型

如果简单触发器的限制导致他们无法满足 可安装的触发器 可能有效。下表总结了触发器类型 每种活动类型都有各自的可用选项例如,Google 表格、幻灯片、表单和 Google 文档都支持简单的打开触发器,但仅支持表格、文档和表单 可安装的打开触发器。

事件 简单触发器 可安装的触发器
打开
表格
幻灯片
表单*
文档

function onOpen(e)

表格
表单*
文档
修改
表格

function onEdit(e)

表格
更改选择
表格

function onSelectionChange(e)

安装
表格
幻灯片
表单
文档

function onInstall(e)

更改
表格
表单提交
表格
表单
时间驱动(时钟)
表格
幻灯片
表单
文档
独立
Get
独立

function doGet(e)

帖子
独立

function doPost(e)

* 当用户打开 而是在编辑者打开表单进行修改时进行。