您可以在Google电子表格自定义菜单中制作菜单项吗?

时间:2012-11-19 10:04:45

标签: google-apps-script google-sheets

使用spreadsheet.addMenu()向电子表格添加菜单项时,有没有办法让它们像项目View> Normal?那样可以选择?

3 个答案:

答案 0 :(得分:3)

如果您真的想这样做,也许您可​​以像以下一样笨拙地做些事情,并在必要时致电updateMenu添加复选标记。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "  item 1", functionName: "one"},
                      {name: "  item 2", functionName: "two"} ];
  ss.addMenu("myMenu", menuEntries);
}

function one() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.updateMenu("myMenu", [ {name: "✓ item 1", functionName: "one"},
                            {name: "  item 2", functionName: "two"} ]);
  // ... item 1 actions
}

function two() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.updateMenu("myMenu", [ {name: "  item 1", functionName: "one"},
                            {name: "✓ item 2", functionName: "two"} ]);
  // ... item 2 actions
}

答案 1 :(得分:1)

我尝试使用@KalyanReddy提供的答案,但遇到了问题,因为电子表格UI会压缩空格并修剪菜单名称。通过反复试验,我找到了解决办法。

Screenshot

这是一个生成复选框对齐菜单的实用程序函数:

/**
 * Make a checkbox menu item. Returns a string with the original text aligned to
 * leave room for a check mark. (Dependent on font, compatible with default
 * font used in Google Spreadsheets as of May 2013. YMMV.)
 *
 * @param {String} name Original item name
 * @param {boolean} check True if menu item should have a check mark
 *
 * From an idea by Kalyan Reddy, http://stackoverflow.com/a/13452486/1677912
 */
function buildItemName( name, check ) {
  // Prepend with check+space, or EM Space
  return ( check ? "✓ " : "\u2003" ) + name;
}

要真正使用它,你应该编写一个函数来跟踪状态并通过调用buildItemName构建你的菜单项,然后调用它&只要状态发生变化,updateMenu()

答案 2 :(得分:0)

简短的回答是否定的。

长(呃)答案是菜单项只能调用函数,所以它没有用来显示'状态'。不过,您可以想象在电子表格中使用某种类型的标题来显示您想要显示的状态,方法是修改文本值或更改颜色以显示已调用某些函数。

我假设您的请求的最终目标是显示某个函数是否已被调用...如果我错了请解释是您的意图。