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 に答える