SpreadsheetApp.getActive() 在 Google Sheets 插件的 onOpen 触发器中失败

SpreadsheetApp.getActive() fails in onOpen trigger in Google Sheets addon

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

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

我遇到以下异常:

[Exception: You do not have permission to perform that action.]

我查看了 documentation 并发现 OnOpen 触发器中的 AuthMode 是 None,它不允许访问任何需要授权的服务。

如果有任何其他方法可以完成我的任务,请提出建议。

谢谢。

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

中所写

However, because an editor add-on automatically runs its onOpen(e) function to add menu items when a document opens, the behavior above adds some complexity to Apps Script's authorization rules. After all, users wouldn't be comfortable with an add-on accessing personal data every time they open a document.

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

引起的

Getting an add-on from the store while using that document, or Using a previously installed add-on in that document

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

参考文献: