Google apps script 如何从同一库生成的电子表格下拉菜单调用库函数

Google apps script 如何从同一库生成的电子表格下拉菜单调用库函数,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我创建了一个库,该库具有创建新电子表格菜单的特定功能(使用addMenu)。我的菜单选项应该调用我的库中的其他函数来执行任务 // Bare Minimum Deployment on a blank spreadsheet with // my library registered (called myLibraryName for this example). function onOpen() { myLibraryName.setMenus(); // creating new

我创建了一个库,该库具有创建新电子表格菜单的特定功能(使用addMenu)。我的菜单选项应该调用我的库中的其他函数来执行任务

// Bare Minimum Deployment on a blank spreadsheet with 
// my library registered (called myLibraryName for this example).

function onOpen() {
  myLibraryName.setMenus(); // creating new drop-down menus
}

function onEdit(event) {
  myLibraryName.doEvent(event); // sending the onEdit event to a function in my library.
}
现在的问题是,当我选择一个菜单选项时,谷歌应用程序脚本会给我一条错误消息,如

找不到脚本函数myMenuFunction

所以我试着在菜单项中添加前缀

menuEntries.push({name: "About", functionName: "myLibraryName.myMenuFunction"});
但它也不起作用


因此,我想征求关于如何创建一个库的建议,该库可以创建链接到库中函数的菜单。

我不是100%确定您在调用什么,但我认为这是一个已知的问题

看起来您需要直接从菜单调用函数,而不是从上层调用

有一个

在仔细观察您的问题时,您似乎试图在电子表格的不同菜单中调用相同的函数。基于我链接的bug,您可能无法这样做,因为您需要定义一个本地函数并使用它与脚本交互。

是的,类似的问题

我有大约20个电子表格,用愚蠢的代码更新所有脚本是相当无聊的:

 function doSomething(){ myLib.doSomething();}
每次我在主库中添加新菜单项时

因此,我发现了或多或少肮脏的解决方法——将菜单项链接到lib中的“代理”函数,并提前在客户机电子表格中创建几个类似的函数(对所有客户机电子表格执行一次)

/------------LIB-----------
函数libMenu(){
var mySheet=SpreadsheetApp.getActiveSpreadsheet();
var menuEntries=[{name:“增量当前单元格”,functionName:“processMenuEntry0”},
{name:“对行执行某些操作”,functionName:“processMenuEntry1”}
];
添加菜单(“库函数”,菜单);
}
函数processMenutery0(){incrementCurrentCell();}
函数processMenutery1(){doSomethingWithRow();}
//-----------解放党-----------
//-----------客户-----------
函数onOpen(){
libMenu();
}
函数processMenuEntry0(){gTracking.processMenuEntry0();}
函数processMenuEntry1(){gTracking.processMenuEntry1();}
函数processMenuEntry2(){gTracking.processMenuEntry2();}
函数processMenuEntry3(){gTracking.processMenuEntry3();}
//等等。
//我以这种方式预订了二十个菜单条目
//-----------客户-----------
目前,我确实使用了一个稍微增强的版本,它只允许我更新menuEntries数组。 这是:

/------------LIB-----------
var menuEntries=[{name:“增量当前单元格”,functionName:“增量当前单元格”},
{name:“对行执行某些操作”,functionName:“doSomethingWithRow”}
];
//返回更改了“functionName”参数(->“processMenuEntry”+id)的菜单项
函数转换函数(){
var newMenuEnties=[];
对于(变量i=0;i
是的,确实如此!因此,我想我需要将对库函数的每次调用包装为本地函数,如果以后添加菜单,并且库被许多客户使用,这将是一个很大的不便。是的,当然不方便,但是如果您感觉强烈,请订阅该问题并发表评论。了解人们对解决方案的关注总是有帮助的。你找到更好的方法了吗?当然,谷歌有一种新的改进方法来做到这一点,而不需要库用户添加这么多代码。。。