Google表格附加组件,未添加自定义菜单?

时间:2016-07-09 03:00:48

标签: javascript google-apps-script google-sheets google-apps-script-addon

我目前正在尝试制作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中删除了它,并为它们添加了一个菜单项,希望它会有所帮助。唉它没有。

2 个答案:

答案 0 :(得分:0)

基于document

  

如果加载项尝试使用上面显示的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();
}

结果

enter image description here

使用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();
}

结果

enter image description here enter image description here

希望这有帮助!

答案 1 :(得分:0)

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

  

onInstall(e)的最常见用法只是调用onOpen(e)来添加   自定义菜单。毕竟,安装了加载项后,文件为   已经打开,因此onOpen(e)不会单独运行,除非   重新打开文件。

所以:

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