在自定义插件中为 google 应用脚本安装触发器

Install trigger for google app script in custom addon

我对插件还是很陌生,我在安装触发器和拥有 运行 的相关功能时遇到了问题。

下面是添加1个"on open"触发器和1个"on edit"触发器到sheet的函数。

function addTriggers() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var triggers = ScriptApp.getUserTriggers(sheet);

  if(triggers.length!=2)//
  {
    ScriptApp.newTrigger('sheetOpen')
    .forSpreadsheet(sheet)
    .onEdit()
    .create();

    ScriptApp.newTrigger('sheetEdited')
    .forSpreadsheet(sheet)
    .onOpen()
    .create();     
  }

然后我尝试通过onInstall();

安装这个功能
function onInstall(e){
  addSpreadsheetEditTrigger(); 
  sheetOpen();
}

function sheetOpen()
{
//do something after the sheet is open;
}

function sheetEdited()
{
//do something when the sheet is edited by user;
}

当我测试这个插件时,没有安装触发器,因此 none 发生了。另请注意,我需要使用可安装的触发器,因为我需要访问外部文件。

谁能告诉我哪里做错了?

1。如何手动构建触发器

如果您想为价差构建触发器sheet,您需要在 forSpreadsheet() 中指定参数 价差sheet , 而不是 sheet!

所以:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
...

    ScriptApp.newTrigger('sheetOpen')
    .forSpreadsheet(spreadsheet)
    .onOpen()
    .create();
...
  1. 看来你对函数 'sheetOpen''sheetEdited' 的赋值是错误的

  2. 您应该仔细检查是否确实需要手动构建触发器。相反,您可以调用已经存在的 onOpen(e) 触发器(除非您需要可安装的触发器)。

样本:

function onInstall(e){
  sheetOpen();
}
function onOpen(e){
  sheetOpen();
}
function sheetOpen()
{
//do something after the sheet is open;
}

更新

现在,插件的限制将不允许您直接安装触发器。相反,您可以创建一个自定义菜单,让用户可以选择在选择相应选项时安装触发器。

样本:

function onInstall(e) {
  onOpen(e); 
}
function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('MyAddOn Menu')
  .addItem('Please click here to get started', 'addTriggers')
  .addToUi();
}

function addTriggers() {
  ...
}