spreadsheetでカスタムメニューを作成する~series2: 複数のカスタムメニューを作成する~

GAS
この記事は約3分で読めます。

さて、今日はチャットで質問を受けた内容をもとに記事を書いていこうかなと思います。

対象となる記事は以下の記事で、スプレッドシートにカスタムメニューを作成する方法という内容でした。

チャットでの質問をたまに回答している(全て回答できていなくてすみません。。無料でやってるので、時間があって暇な時しか回答できないので。。)のですが、その中の1つを紹介しつつ、回答した実現方法の紹介もしていきます。

スポンサーリンク
もしも_楽天

ユーザ質問:メニューを追加したいのですが・・・

さて、まずはどんな質問がきたかをみていきましょう。

ユーザさん
ユーザさん

メニュー追加の方法で質問です。

以下のように、メニューを追加していく事は可能でしょうか?

function onOpen() {

    SpreadsheetApp.getUi()

        .createMenu(‘CustomeAddOn’)

        .addItem(‘画面にhello world’, ‘myFunction’)

        .addToUi();

        .createMenu(‘CustomeAddOn2’)

        .addItem(‘画面にGood Morning’, ‘myFunction2’)

        .addToUi(); }

me
me

addToUi()を2つ呼び出すことはできないですね。

(やりたいことはメニューバーに2つの要素を表示したいというイメージかな)

メニューの追加、つまりメニューバーに複数の要素を追加する方法、が知りたいという感じかなと思いましたので、そのように回答しました。

では、実際の回答をもとにどのような方法だったら、実現できたかをみていきましょう。

実現方法:複数のカスタムメニューを作成する方法

addToUi()メソッドはメソッドチェーン内で1つしか利用できない(実行した段階で評価されて、その後の関数は評価されない)ので、渡す方法を変えてあげれば(メソッドチェーンを分けてあげる)対応可能です。

実際のコードサンプル

実際に提示したのは以下のような方法です。

function onOpen() {
    let ui = SpreadsheetApp.getUi();

    //※※ 独自メニューその1 ※※
    //1つ目のメニュー名を決定
    let menu = ui.createMenu('CustomeAddOn');
    //メニューに実行ボタン名と関数を割り当て
    menu.addItem("実行ボタン名その1","関数名その1");
    menu.addItem("実行ボタン名その2", "関数名その2");
   
    //※※ 独自メニューその2 ※※
   //2つ目のメニュー名を決定
   let menu02 = ui.createMenu('CustomeAddOn2');
   //メニューに実行ボタン名と関数を割り当て
   menu02.addItem("実行ボタン名その3","関数名その3");
   menu02.addItem("実行ボタン名その4", "関数名その4");
   
    //スプレッドシートに反映
   menu.addToUi();
   menu02.addToUi();
}

要は、menuアイテムを2つ作って、それぞれaddToUiメソッドで実行すればいけますね。

まとめ

今回はユーザさんからの質問に基づいて回答した内容を記事にしてみました。

カスタムメニューのアイテムを複数にする方法の紹介でした。前回の記事は1つのカスタムメニューに複数の項目を入れましたが、今回はタブ自体を複数にする方法でした。

たまにはチャットの質問も回答しますし、汎用的に読者さんの疑問に応えそうな質問は今後も記事化していきたいと思います。

タイトルとURLをコピーしました