繁体   English   中英

如何在新创建的 Google 表格中使用我的插件菜单?

[英]How can I get my add-ons menus available in newly created Google Sheets?

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

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

唯一可行的方法是,如果我 go 进入Add-ons > Manage add-ons ,然后单击Use in this document

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

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

他们无法访问需要授权的服务。

在单击“在本文档中使用”之前,插件处于安装模式,并且事件 object 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();
}

仅安装时,用户只能看到“启用附加组件”选项。 通过单击它,插件将启用,因此 function 可以简单地调用onOpen()并且if..else将加载正确的菜单选项。

请注意,您只需要此修复程序,因为您的简单触发器onOpen (e)正在使用Properties服务。 如果删除它,则无需测试已安装/启用模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM