Google スプレッドシートのデータを複数タブ対応で JSON 形式でダウンロードする方法

ウェブ制作
はる
はる

Google スプレッドシートのデータを JSON 形式でダウンロードしたいと思ったことはありますか? この記事では、Google スプレッドシートのデータを複数シート対応で JSON 形式でダウンロードする方法を紹介します。

シートの用意

まず、スプレッドシートを用意します。

  • 上記画像のようにタブで『sheet1』から『sheet4』を作成します。
  • 1行目にはラベルを記述し
  • 2行目にはJSONのkeyを設定します。
  • 3行目以降はデータを入力していきます。

手順1: Google Apps Script の設定

まず、Google スプレッドシートを開いてください。次に、「ツール」メニューから「スクリプト エディタ」を選択して、Google Apps Script のエディタを開きます。

手順2: コードの入力

以下のコードをコピーし、コード.gs に貼り付けてください。

// JSON ダウンロード用ダイアログを表示する関数
function displayJSONDownloadDialog() {
  // ダイアログの HTML テンプレートを読み込む
  var dialogHtml = HtmlService.createHtmlOutputFromFile("dl");

  // ダイアログを表示する
  SpreadsheetApp.getUi().showModalDialog(dialogHtml, "JSON 形式でダウンロード");
}

// シートのデータを取得し、JSON 文字列に変換する関数
function fetchSheetData(sheetName) {
  // 指定された名前のシートを取得する
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);

  if (sheet == null) {
    throw new Error("シートが見つかりません: " + sheetName);
  }

  // シート内の最終行と最終列の番号を取得する
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();

  // JSON オブジェクトのキーを格納する配列を作成する
  var jsonKeys = [];

  // データを格納する配列を作成する
  var jsonData = [];

  for (var x = 1; x <= lastColumn; x++) {
    jsonKeys.push(sheet.getRange(2, x).getValue());
  }

  // シートのデータを取得し、JSON オブジェクトに変換する
  for (var y = 4; y <= lastRow; y++) {
    var jsonObject = {};
    
    for (var x = 1; x <= lastColumn; x++) {
      jsonObject[jsonKeys[x-1]] = sheet.getRange(y, x).getValue();
    }

    // JSON オブジェクトを配列に追加する
    jsonData.push(jsonObject);
    Logger.log(jsonData);
  }

  // JSON 配列を整形し、文字列として返す
  return JSON.stringify(jsonData, null, '\t');
}

// スプレッドシートが読み込まれたときに実行される関数
function onOpen() {
  // メニューバーに「JSON で出力」メニューを追加する
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{
    name : "JSONで出力",
    functionName : "displayJSONDownloadDialog"
  }];
  spreadsheet.addMenu("JSON", menuEntries);
}

手順3: HTMLファイルの作成

次に、エディタで新しい HTML ファイルを作成し、「dl.html」という名前を付けてください。以下のコードをコピーし、作成した HTML ファイルに貼り付けます。

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <!-- JavaScriptを含むスクリプトタグ -->
    <script type='text/javascript'>
      // シート名を引数として受け取り、ダウンロード処理を行う関数
      function handleDownload(sheetName) {
          // スプレッドシートからデータを取得し、ダウンロードリンクを作成
          google.script.run.withSuccessHandler(function(content) {
              var blob = new Blob([content], { "type": "application/json" });
              var linkElement = document.createElement('a');
              linkElement.href = window.URL.createObjectURL(blob);
              linkElement.download = sheetName + '.json';
              linkElement.click();
          }).fetchSheetData(sheetName);
      }
    </script>
</head>
<body>
    <!-- シート1のダウンロードボタン -->
    <h2>シート1</h2>
    <button onclick="handleDownload('sheet1')">ダウンロード</button>

    <!-- シート2のダウンロードボタン -->
    <h2>シート2</h2>
    <button onclick="handleDownload('sheet2')">ダウンロード</button>

    <!-- シート3のダウンロードボタン -->
    <h2>シート3</h2>
    <button onclick="handleDownload('sheet3')">ダウンロード</button>

    <!-- シート4のダウンロードボタン -->
    <h2>シート4</h2>
    <button onclick="handleDownload('sheet4')">ダウンロード</button>
</body>
</html>
入力した後の状態

手順4: スクリプトの保存と実行

すべてのコードが入力されたら、「ファイル」メニューから「保存」を選択してスクリプトを保存します。その後、スプレッドシートに戻り、リロードします。

リロード後、メニューバーに「JSON」メニューが追加されていることが確認できます。「JSON」メニューから「JSONで出力」を選択すると、ダウンロード用のダイアログが表示されます。

ダイアログの表示

ダウンロードボタンを押下することでjsonファイルがダウンロードされるかと思います。

まとめ

以上が、Google スプレッドシートのデータを複数シート対応で JSON 形式でダウンロードする方法です。ぜひお試しください。

参考記事

スプレッドシートからjsonを作る - Qiita
やりたいことスプレッドシートからjsonを作りたい。見出しをkeyにするパターンと{id:001, name=aaa, flg=true},{id:002, name=bbb, flg=fal…
タイトルとURLをコピーしました