我将在几个用户之间分发带有onOpen菜单的电子表格。我想在库中保留菜单定义和功能,因此如果我添加一些菜单选项或更新某些功能,使用该电子表格的每个人都将自动更新。
到目前为止,在电子表格脚本中我只有这个简单的代码:
function onOpen() {
myLib.loadMenu();
}
菜单加载电子表格没有问题,但无论我如何命名菜单上的调用和实际功能(有或没有myLib。)我总是收到错误“脚本功能doSomething无法找到”时使用该菜单中的选项。
我应该如何命名菜单中的函数调用以及库中的实际函数,以便使用此方法。
谢谢,Fausto
EDIT-1 :让我提供更多详情和示例代码
我的目标是能够从库中为该电子表格菜单添加更多选项,而无需更新每个用户的电子表格。
这是示例代码,全部包含在电子表格脚本中,尚未使用任何库,它可以正常运行
function onOpen() {
testMenu();
}
function testMenu() {
SpreadsheetApp.getActiveSpreadsheet().addMenu(
'Testing', [
{ name: 'Do Something #1', functionName: 'someFunction1' },
null,
{ name: 'Do Something #2', functionName: 'someFunction2' } ]);
}
function someFunction1() {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1");
}
function someFunction2() {
SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2");
}
我想要做的是获得相同的功能,但在电子表格脚本和库之间拆分代码,如下所示
在电子表格脚本
上function onOpen() {
xsLib.testMenu();
}
在图书馆
function testMenu() {
SpreadsheetApp.getActiveSpreadsheet().addMenu(
'Testing', [
{ name: 'Do Something #1', functionName: 'someFunction1' },
null,
{ name: 'Do Something #2', functionName: 'someFunction2' } ]);
}
function someFunction1() {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1");
}
function someFunction2() {
SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2");
}
在这种拆分方法中,从库调用构建的菜单在电子表格上正确显示,但是当使用该测试菜单中的选项时,我收到一条消息错误:“找不到脚本函数someFunction1”
答案 0 :(得分:2)
最后我检查过你不能给脚本中没有包含的触发器函数。您最可能需要做的是在脚本中为scpreadsheet创建一个包装器函数。像这样:
function doSomething() {
myLib.doSomething();
}
编辑: 您正在寻找的功能目前无法使用。要获得所需的效果,您需要指定要调用的函数属于库且不允许。
有一项功能请求:
http://code.google.com/p/google-apps-script-issues/issues/detail?id=799
如果您对此功能感兴趣,请对此问题进行投票以提高其优先级。
最佳,
安东
答案 1 :(得分:1)
错误如:“无法找到脚本函数someFunction1” 是在“本地”代码中调用someFunction1而不是lib
看到; https://code.google.com/p/google-apps-script-issues/issues/detail?id=1346
您可以通过向“本地”代码添加存根函数来解决此问题。
答案 2 :(得分:1)
~~在你的图书馆里~~
var menu = SpreadsheetApp.getUi().createMenu('Magical Menu');
menu.addItem('Do The Thing', 'LibraryName.function_name');
menu.addToUi();
~~~
答案 3 :(得分:0)
这就是我解决作品的方式
// ----myLibrary----
function loadMenu() {
var menuList = [
{ name: 'New', functionName: 'myLibrary.addData' },
{ name: 'Modify', functionName: 'myLibrary.modifyData' },
{ name: 'Delete', functionName: 'myLibrary.deleteData' },
];
return menuList;
}
function modifyData() {
Logger.log('called by modifyData');
}
function addData() {
Logger.log('called by addData');
}
function deleteData() {
Logger.log('called by deleteData');
}
// ----myLibrary----
// -----Client-------
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuList = myLibrary.loadMenu();
ss.addMenu('Custom Menu', menuList);
}
// -----Client-------