如何在新创建的Google工作表中获得我的附加组件菜单?



我在理解Google Sheet插件的工作流程时遇到了一点麻烦。我使用它在一个表中,其中的脚本是绑定太,它的工作非常好。但是,当我创建一个新的电子表格时,我可以看到在Add-ons下创建的附加菜单,但不能看到它的子菜单。此外,如果我看看我得到的处决:当试图执行Spreadsheet.getUi()创建菜单时,Exception: You do not have permission to perform that action.

我已经部署了一个新版本,并调整了Marketplace SDK中的设置以与部署的设置相匹配。此外,我在我的google项目和Marketplace SDK中的OAuth同意屏幕中具有脚本匹配的所有范围。

唯一有效的方法是如果我进入Add-ons > Manage add-ons并点击Use in this document

让我的附加菜单在新创建的电子表格中自动可用的正确工作流程是什么?

onOpen (e)是一个简单的触发器,它受到一系列的限制,特别是

不能访问需要授权的业务

在您单击"在本文档中使用">之前,附加组件处于安装模式并且事件对象e.authMode具有值AuthMode.NONE,因此您的触发器无法访问Properties服务。只有在单击"在此文档中使用">之后,触发器才会进入"启用模式"。(e.authMode === AuthMode.LIMITED),可以访问Properties

要解决这个问题,您需要测试该附加组件是否已安装或启用,并显示一个菜单选项,允许用户在仅安装时启用它。请看下面的例子:

function onOpen (e) {
var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
if (e && e.authMode == ScriptApp.AuthMode.NONE) {
// Add a normal menu item (works in all authorization modes).
menu.addItem('Enable add-on', 'enableAddOn');
} else {
// Add a menu item based on properties (doesn't work in AuthMode.NONE).
var properties = PropertiesService.getDocumentProperties();
var workflowStarted = properties.getProperty('workflowStarted');
if (workflowStarted) {
menu.addItem('Check workflow status', 'checkWorkflow');
} else {
menu.addItem('Start workflow', 'startWorkflow');
}
}
menu.addToUi();
}
function enableAddOn () {
onOpen();
}

当它只安装时,用户只看到选项"启用附加组件"通过点击它,插件就被启用了,所以该函数可以简单地调用onOpen(),if..else将加载正确的菜单选项。

请注意,您只需要这个修复,因为您的简单触发器onOpen (e)正在使用属性服务。如果您删除它,就不需要测试已安装/启用模式。

最新更新