Yep, similar problem.
I have about twenty spreadsheets and it's quite boring to update all its scripts with silly code:
function doSomething(){ myLib.doSomething();}
every time I add new menu entry in main lib.
So I've found more or less dirty workaround - link menu entries to "proxy" functions in lib and create several similar functions in the client spreadsheets in advance (do it once for all client spreadsheets)
function libMenu() {
var mySheet = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Increment current cell", functionName: "processMenuEntry0"},
{name: "Do something with row", functionName: "processMenuEntry1"}
];
mySheet.addMenu("Library Functions", menuEntries);
}
function processMenuEntry0() { incrementCurrentCell();}
function processMenuEntry1() { doSomethingWithRow(); }
function onOpen() {
Library.libMenu();
}
function processMenuEntry0() {gTracking.processMenuEntry0();}
function processMenuEntry1() {gTracking.processMenuEntry1();}
function processMenuEntry2() {gTracking.processMenuEntry2();}
function processMenuEntry3() {gTracking.processMenuEntry3();}
At the moment I do use a little bit enhansed version that allow me to update menuEntries array only.
Here it is:
var menuEntries = [ {name: "Increment current cell", functionName: "incrementCurrentCell"},
{name: "Do something with row", functionName: "doSomethingWithRow"}
];
function convertMenuEntries() {
var newMenuEnties=[];
for (var i=0; i< menuEntries.length ;i++){
if (menuEntries[i] == null) {
newMenuEnties.push(null);
continue;
}
newMenuEnties.push({name: menuEntries[i]["name"], functionName: "processMenuEntry" + i});
}
return newMenuEnties;
}
function libMenu() {
var mySheet = SpreadsheetApp.getActiveSpreadsheet();
mySheet.addMenu("Library Functions", convertMenuEntries());
}
function processMenuEntry(id){
this[menuEntries[id]["functionName"]]();
}
function processMenuEntry0() {processMenuEntry(0);}
function processMenuEntry1() {processMenuEntry(1);}
function onOpen() {
Library.libMenu();
}
function processMenuEntry0() {gTracking.processMenuEntry0();}
function processMenuEntry1() {gTracking.processMenuEntry1();}
function processMenuEntry2() {gTracking.processMenuEntry2();}
function processMenuEntry3() {gTracking.processMenuEntry3();}