Googleスプレッドシートからjsonファイルの出力する方法

2019年1月20日

次のようなテーブルのスプレットシートデータをjsonファイルに出力するサンプル
name age height
太郎 10 130
次郎 9 110
三郎 8 100
[
{"name":"太郎","age":10,"height":130},
{"name":"次郎","age":9,"height":110},
{"name":"三郎","age":8,"height":100}
]
「ツール」→「スクリプトエディタ」を選択してスクリプトエディタ画面に移動しコード.gsとdialog.htmlを記述します。

コード.gs

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange().getValues();
  var keys = rows.splice(0,1)[0];
  var data = rows.map(function(row) {
    var obj = {}
    row.map(function(item.index) {
      obj[keys[index]] = item;
    });
    return obj;
  });
  json = Json.stringify(data); 
HtmlService.createTemplateFromFile("dialog").evaluate();
  SpreadsheetApp.getUi().showModalDialog(html, "ファイルダウンロード");
}
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name: "シートをjsonで出力",
    functionName: "myFunction"
  }];
  spreadsheet.addMenu("出力", entries);
}
onOpenはスプレッドシートを開いたときに呼ばれます。
addMenuでスプレットシートのメニューを追加します。
addMenuで追加したメニューを選択したらメソッドを呼ぶようにします。
追加したメニューからmyFunctionを呼ぶ処理になります。

dialog.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script type="text/javascript">
      function handleDownload() {
        var content = "<? json ?>";
        var blob = new Blob([content], {"type": "application/json"});
        const link = document.getElementById("download");
        link.download = "ダウンロードファイル名";
        link.href = window.URL.createObjectURL(blob);
        return true;
      }
    </script>
  </head>
    <a id="download" href="#" onclick="handleDownload()">ダウンロード</a>
  <body>
  </body>
</html>
<? json ?>はコード.gsのmyFunctionのjson変数が置き換わります。

承認設定をする

「承認が必要」とでたら続行を選択してGoogleアカウントを選択します。

「このアプリは確認されてません」とでたら詳細を選択して「安全でないページに移動」リンクを選択し次のページで許可ボタンを選択します。

ファイルの出力

追加したメニューを選択するとダイアログが表示されるのでダウンロードリンクをクリックするとスプレッドシートのデータをjson形式にしたファイルがダウンロードされます。