1

当使用将菜单项添加到电子表格时spreadsheet.addMenu(),有没有办法让它们像项目 View>Normal 一样可勾选?

4

3 回答 3

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
}
于 2012-11-19T11:05:33.147 回答
1

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

截屏

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

/**
 * 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()在状态更改时调用它。

于 2013-05-27T02:35:56.740 回答
0

最简洁的答案是不。

较长(更)的答案是菜单项只能调用函数,因此它没有用处来显示“状态”。然而,您可以想象在电子表格本身中使用某种标题来显示您想要显示的状态,或者通过修改文本值或通过更改颜色来显示某个函数已被调用。

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

于 2012-11-19T11:00:16.170 回答