是否可以将模块的功能作为SpreadsheetApp菜单的函数名称传递?

时间:2014-07-24 03:58:17

标签: google-apps-script

我的代码是这样的:

MyCompany = (MyCompany || {});
MyCompany.init = function () {
    Logger.log('init');  
};

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: 'how to call MyCompany.init without creating function?'
    }];
    spreadsheet.addMenu("Test", menus);
};

是否可以在不创建其他功能的情况下调用MyCompany.init?

1 个答案:

答案 0 :(得分:0)

我害怕,这是不可能的。应在functionName参数中使用的函数名称应在全局范围内定义。尽管该对象是在全局范围内定义的,但您无法在菜单中使用其功能。

官方脚本参考中的未声明(也许是,但它隐藏得非常好),但它可以通过一些简单的测试来证明,比如在不同范围之间移动函数并查看脚本是否仍然有效。

最好的想法,你可以在这里(我想)做的是创建一个全局函数,它会像这样调用MyCompany.init

MyCompany = (MyCompany || {});
MyCompany.init = function () {
    Logger.log('init');  
};

function callInit() {
    MyCompany.init();
}

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: 'how to call MyCompany.init without creating function?'
    }];
    spreadsheet.addMenu("Test", menus);
};

这样您的命名空间组织将保持不变。