【问题标题】:SpreadsheetApp.getActive() fails in onOpen trigger in Google Sheets addonSpreadsheetApp.getActive() 在 Google 表格插件中的 onOpen 触发器中失败
【发布时间】:2020-10-13 00:11:51
【问题描述】:

我想阅读活动电子表格并在此基础上添加菜单项。下面是 OnOpen(e) 触发器中的代码:

function onOpen(e) {
 var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
 //add menus based on values of sheet
}

我遇到了以下异常:

[例外:您无权执行该操作。]

我浏览了documentation,发现 OnOpen 触发器中的 AuthMode 为 None 不允许访问任何需要授权的服务。

请建议是否有其他方法可以完成我的任务。

谢谢。

【问题讨论】:

  • 1.这是一个已发布的插件 2。如果不是,Edit 显示您的清单(查看>):appscript.json
  • 另外,一个可重现的示例将帮助您和我们找到解决方案
  • @TheMaster,是的,它已经发布了
  • @Marios,我在这一行只收到异常“SpreadsheetApp.getActive()”
  • 那么除非用户使用插件,否则无法访问电子表格。即,该插件已为文档启用。使用菜单首先在AuthMode.None 中启动工作流。然后,在得到AuthMode.FULL 之后,做剩下的事情。您链接的文档通过示例代码清楚地说明了所有这些。

标签: google-apps-script google-sheets add-on


【解决方案1】:

除非电子表格的所有者或编辑者使用该电子表格中的插件,否则无法访问该电子表格。如the official document所写,

但是,由于编辑器插件会在文档打开时自动运行其 onOpen(e) 函数来添加菜单项,因此上述行为增加了 Apps 脚本授权规则的一些复杂性。毕竟,用户不会对每次打开文档时访问个人数据的插件感到满意

需要为文档启用插件,插件才能访问文档。启用后,onOpen()AuthMode.LIMITED 中运行,您可以在其中访问绑定的文档。这种“启用”状态是由

引起的

在使用该文档时从商店获取插件,或者 在该文档中使用以前安装的插件

在所有其他情况下,在 AuthMode.NONE 中添加运行。在这种模式下,您只能添加菜单项,而不能访问任何数据,包括绑定的电子表格。添加菜单项以请求访问此类数据。然后,得到AuthMode.FULL之后,就可以完成剩下的工作流程了。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    相关资源
    最近更新 更多