【问题标题】:How editors in google sheets can run scripts in installed by app script menu谷歌表格中的编辑器如何运行由应用脚本菜单安装的脚本
【发布时间】:2020-11-19 17:50:09
【问题描述】:

有一个代码示例我的问题类型:

function testing(){
  let ss = SpreadsheetApp.create("Test Table");
  ss.addEditor("ixxxx@gmail.com");
  ScriptApp.newTrigger('button')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

function button(){
  SpreadsheetApp.getUi()
      .createMenu("Scripts Menu")
      .addItem('Hello!', 'hello')
      .addToUi();
}

function hello(){
  SpreadsheetApp.getUi().alert("Hello World!");
}

在该代码中,在绑定到 SpreadSheet 的谷歌应用程序脚本中运行,我创建了一个 SpreadSheet,将编辑权限授予另一个用户,然后设置一个已安装的 onOpen 触发器,该触发器创建触发 Hello 脚本的菜单。我希望当这个编辑器单击该电子表格中的菜单项 hello 时,他会看到 Hello!信息。但这不会发生。相反,它只是加载一个脚本而没有结束。但是当我在我的帐户下运行它时,它工作得很好。谁能指出我的错误在哪里,或者我只是在某些事情上被误导了,我该如何解决?

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    请看documentation:

    getUi()

    返回电子表格用户界面环境的一个实例,该环境允许脚本添加菜单、对话框和边栏等功能。脚本只能与打开的电子表格的当前实例的 UI 交互,并且仅当脚本绑定到电子表格时。有关详细信息,请参阅菜单、对话框和侧边栏指南。

    • 换句话说,如果您的脚本绑定到电子表格,您只能使用getUi()
    • 无论getUi() 所做的一切(例如创建自定义菜单)仅适用于当前绑定的电子表格,而不适用于您的代码创建的新电子表格。

    【讨论】:

    • 那么,没有办法为动态创建的表格创建菜单,我理解对吗?
    • 至少没那么简单,您可能需要查看Apps Script API,它允许您/用户在创建电子表格后将其绑定到应用程序脚本文件。
    【解决方案2】:

    我认为这是某种形式的授权错误,但我已经重现了问题。

    我认为问题只是“hello”脚本未包含在您的“测试”脚本创建的新工作表测试表中。因此,即使用户界面添加了脚本菜单,您也可以选择“你好!”从中,该工作表中不存在“hello”脚本,因此菜单中的脚本只是挂起。

    我本来预计会出现其他错误,例如“找不到脚本”,或者它最终会超时。

    无论如何,这有意义吗?它是否解释了你的问题?

    【讨论】:

    • 这听起来很奇怪,因为我可以在该表上设置可安装触发器,它会触发基表中定义的函数,但我不能使用它们的派生函数?甚至可以为动态创建的表格创建工作菜单吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多