在 Google 表格模板中使用 DriveApp class

Using DriveApp class in Google Sheets template

我已经在 Apps 脚本中编写了一个函数,可以在活动电子表格旁边创建一个新文件夹,但是当涉及到触发器时我就崩溃了。

我了解到要创建文件夹,您需要使用可安装触发器而不是简单触发器,但我试图在 Google 表格模板文件中执行此操作,所以我不能使用 UI 安装触发器。

当我尝试以编程方式创建触发器时,我只是收到 您无权调用 ScriptApp.newTrigger 错误。这可能是因为该文件是从模板创建的? 有没有办法在从模板文件创建新电子表格时自动安装该触发器,最好不先询问用户授权?

这将内置于 G Suite 中,仅供我们的用户使用。 G Suite 中有没有办法在全域范围内安装此触发器?

谢谢

如果我理解正确,你希望用户能够:

  • 基于现有模板创建新的电子表格。
  • 使用脚本中定义的函数(我猜是通过 DriveApp.createFolder)创建文件夹,而不要求用户授权。

恐怕无法避免授权步骤,但您可以通过在电子表格中使用简单的 onOpen 触发器创建一个 UI 菜单来减轻这个过程的痛苦,它会有一个单击该项目将安装您想要的触发器。

我在这里写了一个小例子来展示工作流程:

首先,创建一个简单的 onOpen,它将在电子表格打开时创建一个名为 Custom menu 的菜单:

function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu('Custom menu')
  .addItem('Install trigger', 'createTrigger')
  .addToUi();
}

然后,如果用户访问该菜单并单击 Install trigger,则以下函数将 运行,这将要求用户授权,并且在获得授权后,安装一个 onEdit触发器:

function createTrigger() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger('createFoldersOnEdit')
    .forSpreadsheet(ss)
    .onEdit()
    .create();
}

最后,安装的 onEdit 触发器将在每次编辑电子表格时触发一个名为 createFoldersOnEdit 的函数。