ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】カスタムメニューを作成してヘッダーのメニューからスクリプトを実行しよう!

この記事は GAS道場 Advent Calendar 2019 の14日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。

今回は、スプレッドシート上のヘッダーメニューからスクリプトを実行するカスタムメニューを作成したいと思います。

カスタムメニューとは

公式のドキュメントはこちらになります。

developers.google.com

こちらを参考に、今回も再びアドベントカレンダー3日目に作成した行と列を転置するスクリプトを使いたいと思います。

f:id:ponkotsu0605:20191213002916p:plain 今回のことができれば、このようにヘッダーにカスタムメニューが作成され、以下のようなメニューからスクリプトを実行できるようになります。 f:id:ponkotsu0605:20191213003004p:plain

スクリプト

以下がソースコードになります。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('カスタムメニュー')
      .addItem('転置するよ', 'test4')
      .addToUi();
}

function test4() {
  // 現在のアクティブなスプレッドシートを読み込む
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  // 現在のアクティブなシートを読み込む
  var sheet = SpreadsheetApp.getActiveSheet();
  
  var data = sheet.getDataRange().getValues();
  data = transpose(data)
  Logger.log(data);
  sheet.clear();
  var rows = data.length;
  var cols = data[0].length;
  sheet.getRange(1,1,rows,cols).setValues(data); 
}

function transpose(a) {
  return Object.keys(a[0]).map(function (c) {
    return a.map(function (r) {
      return r[c];
    });
  });
}   

onOpen()以外はすべて3日目のスクリプトのコピペになります。onOpenを作成することで、スプレッドシートを開いたタイミングで実行されるようになります。この関数の処理でヘッダーのメニューにカスタムメニューという名前のメニューが追加され、転置するよという項目が追加されます。そこに転置する処理の関数名を入れてあります。

実行

実行は簡単、上のメニューから転置するよ項目を押すだけ。押すだけで行と列が転置してくれます。

さいごに

以上のように、カスタムメニューはスプレッドシートを扱うときに簡単にスクリプトを呼べるメニューになると思うので、スプレッドシートの作業の自動化などにはとても向いているんじゃないかなと思います。