基于Adding arguments to a function in the onOpen entries object,我试图将条目添加到Google工作表的菜单中。
我收到标题错误:
找不到脚本功能:条目有关更多信息,请参见
https://developers.google.com/apps-script/refere
我下面的代码在做什么错了?
function onOpen() {
var ui = SpreadsheetApp.getUi();
var entries = [{
name : "Summary",
functionName : "copyRowsByColumnPattern",
},
{
name : "Summary2",
functionName : "copyRowsByColumnPattern",
}];
ui.createMenu('Push to Sheet').addItem('Select Sheet', 'entries').addToUi();
}
答案 0 :(得分:2)
创建菜单的最简单方法如下:
function onOpen() {
// Add a custom menu to the spreadsheet.
SpreadsheetApp.getUi() // Or DocumentApp, SlidesApp, or FormApp.
.createMenu('Custom Menu')
.addItem('First item', 'menuItem1')
.addItem('Second item', 'menuItem2')
.addItem('Third item', 'menuItem3')
.addToUi();
}
答案 1 :(得分:1)
要创建菜单(如Apps脚本Menus guide所示),有两条路线:
Ui
类(适用于文档,表单和新版表格Spreadsheet#addMenu()
(适用于旧版表格)。 给出一组要运行的无参数函数:
const entries = [
{name: "function1", functionName: "foo"},
{name: "function2", functionName: "bar"},
{name: "function3", functionName: "baz"},
];
使用Ui
路线,您只能一一添加项:
const menu = _____.getUi()
// .createMenu("menu title");
// OR
// .createAddonMenu();
entries.forEach(function (menuItem) {
menu.addItem(menuItem.name, menuItem.functionName);
});
menu.addToUi();
这种方法还可以定义分隔符和子菜单,因此具有一对一的性质。
Spreadsheet#addMenu
语法允许直接初始化:
const wb = SpreadsheetApp.getActive();
wb.addMenu("menu title", entries);
这两种路由都要求您的脚本项目在创建Menu
之前已定义foo()
,bar()
和baz()
。
还要注意,Apps Script服务器不是持久性的-如果您在onOpen
中以编程方式定义了这些功能,则在脚本运行完毕后便不再定义它们,因此每次都需要重新定义它们被访问。
答案 2 :(得分:0)
问题是.addItem('Select Sheet', 'entries').addToUi();
,您将字符串 entries 作为第二个参数而不是对象entries
传递。
只需将其更改为
.addItem('Select Sheet', entries).addToUi();
它应该可以工作。
实际上,如果您想一次添加多个项目,则需要使用addMenu
因此,它应该是:addMenu('Select Sheet', entries)