2

我目前正在尝试制作一个 Google 表格插件供我的办公室使用。我已经完成了在市场上私下发布它并在域范围内分发它的工作,但我遇到了菜单项未正确添加的问题。我一直在阅读有关 AuthMode 的内容,据我了解,我的用户最初都是 AuthMode.NONE,应该能够添加简单的菜单。也许我对“简单菜单”的理解不同。在我们将所有计算机都切换到 ChromeOS 之前,我真的需要在一周内完成这项工作(不是我的决定,而是 IT 的决定)

这是我认为应该是所有相关代码的内容。每个功能也被正确定义。

function onOpen(e) {
    SpreadsheetApp.getUi().createAddonMenu('Usage Macros')
        .addItem('Summarize', 'firstRun')
        .addSubMenu(SpreadsheetApp.getUi().createAddonMenu('Rate')
            .addItem('PG&E', 'pge')
            .addItem('CARE', 'care'))
        .addSubMenu(SpreadsheetApp.getUi().createAddonMenu('Proposal Type')
            .addItem('SunRun 0%', 'sunRun0')
            .addItem('SunRun 1.9%', 'sunRun19')
            .addItem('SunRun 2.5%', 'sunRun25')
            .addItem('SunRun 2.9%', 'sunRun29')
            .addItem('SunRun 3.5%', 'sunRun35')
            .addItem('SunPower 0%', 'sunPower0')
            .addItem('SunPower 2%', 'sunPower2')
            .addItem('SunNova 0%', 'sunNova0')
            .addItem('SunNova 0.9%', 'sunNova09')
            .addItem('SunNova 1.9%', 'sunNova19')
            .addItem('SunNova 2.9%', 'sunNova29')
            .addItem('Cash', 'cash')
            .addItem('GreenSky', 'greenSky')
            .addItem('EnerBank', 'enerBank'))
        .addItem('Finalize','kleanUp')
        .addToUi();
}

function onInstall(e) {
    onOpen(e);
}

我还应该提到,添加了“Summarize”菜单项和“firstRun”,因为最初的 onOpen 函数调用了 2 个其他函数,这些函数改变了一些格式并从正在打开的文档中截取了无用的信息。我从 onOpen 中删除了它,并为他们添加了一个菜单项,希望它会有所帮助。可惜没有。

4

2 回答 2

1

根据文件

如果加载项尝试使用上面显示的 createMenu(name) 语法创建顶级菜单,则忽略 name 参数,并且在加载项发布的名称下的加载项菜单中为脚本提供一个条目。

这是我对您的代码所做的:

使用createAddonMenu()

function onOpen(e) {
var menu = SpreadsheetApp.getUi().createAddonMenu()

menu.addItem('Summarize', 'firstRun')
.addSubMenu(menu
.addItem('PG&E', 'pge')
.addItem('CARE', 'care'))
.addSubMenu(menu
.addItem('SunRun 0%', 'sunRun0')
.addItem('SunRun 1.9%', 'sunRun19')
.addItem('SunRun 2.5%', 'sunRun25')
.addItem('SunRun 2.9%', 'sunRun29')
.addItem('SunRun 3.5%', 'sunRun35')
.addItem('SunPower 0%', 'sunPower0')
.addItem('SunPower 2%', 'sunPower2')
.addItem('SunNova 0%', 'sunNova0')
.addItem('SunNova 0.9%', 'sunNova09')
.addItem('SunNova 1.9%', 'sunNova19')
.addItem('SunNova 2.9%', 'sunNova29')
.addItem('Cash', 'cash')
.addItem('GreenSky', 'greenSky')
.addItem('EnerBank', 'enerBank'))
.addItem('Finalize','kleanUp')
.addToUi();
}

结果

在此处输入图像描述

使用createMenu()

function onOpen(e) {
var menu = SpreadsheetApp.getUi()

menu.createMenu('Usage Macros')
.addItem('Summarize', 'firstRun')
.addSubMenu(menu.createMenu('Rate')
.addItem('PG&E', 'pge')
.addItem('CARE', 'care'))
.addSubMenu(menu.createMenu('Proposal Type')
.addItem('SunRun 0%', 'sunRun0')
.addItem('SunRun 1.9%', 'sunRun19')
.addItem('SunRun 2.5%', 'sunRun25')
.addItem('SunRun 2.9%', 'sunRun29')
.addItem('SunRun 3.5%', 'sunRun35')
.addItem('SunPower 0%', 'sunPower0')
.addItem('SunPower 2%', 'sunPower2')
.addItem('SunNova 0%', 'sunNova0')
.addItem('SunNova 0.9%', 'sunNova09')
.addItem('SunNova 1.9%', 'sunNova19')
.addItem('SunNova 2.9%', 'sunNova29')
.addItem('Cash', 'cash')
.addItem('GreenSky', 'greenSky')
.addItem('EnerBank', 'enerBank'))
.addItem('Finalize','kleanUp')
.addToUi();
}

结果

在此处输入图像描述 在此处输入图像描述

希望这可以帮助!

于 2016-07-10T13:04:54.657 回答
0

您可能需要添加一个调用 onOpen() 函数的onInstall( ) 函数。

onInstall(e) 最常见的用法就是调用 onOpen(e) 来添加自定义菜单。毕竟,当安装了附加组件时,文件已经打开,因此除非重新打开文件,否则 onOpen(e) 不会自行运行。

所以:

function onInstall(e) {
  onOpen(e);
}
于 2019-02-11T23:58:31.353 回答