0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スプレッドシートの二次元データをJSONでダウンロードする

Last updated at Posted at 2022-10-18

ちょっとしたテストデータを作る時に、GoogleスプレッドシートのデータをJSON形式で欲しくなりました。

調べてみると、いい感じのコードを書いてる人がいたので、拝借しつつ、JSONファイルとしてダウンロード(エクスポート)できるようにしました。

やりたいこと

これを

id name twitter_id
1 taro taro_no_twitter
2 jiro jiro_no_twitter
3 saburo saburo_no_twitter

こう変換します

[
	{
		"id": 1,
		"name": "taro",
		"twitter_id": "taro_no_twitter"
	},
	{
		"id": 2,
		"name": "jiro",
		"twitter_id": "jiro_no_twitter"
	},
	{
		"id": 3,
		"name": "saburo",
		"twitter_id": "saburo_no_twitter"
	}
]

シートのフォーマットについて

  • 1行目にはオブジェクトのキー名が入力されていること
  • 2行目以降に値が入力されていること

結論のコード

toJson.gs
const getData = () => {
  const sheet = SpreadsheetApp.getActiveSheet();
  const arrays = sheet.getDataRange().getValues();

  const [header, ...rows] = arrays;

  return JSON.stringify(rows.map((row) =>
    row.reduce((acc, cell, i) => ({ ...acc, [header[i]]: cell || null }), {})
  ));
};

/** スプレッドシート読み込み時に実行 */
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "JSONで出力",
    functionName : "toJSON"
  }];
  // メニューバーにJSON出力用メニューを追加
  spreadsheet.addMenu("JSON", entries);
};

/** ダウンロードダイアログ表示 */
function toJSON() {

  // ダイアログテンプレート読み込み
  var dl_html = HtmlService.createTemplateFromFile("dl").evaluate();

  // ダイアログ表示
  SpreadsheetApp.getUi().showModalDialog(dl_html, "JSONファイルをダウンロード");
}

ほぼコピペ

dl.html
<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <script type='text/javascript'>
        //ダウンロード実行
        function handleDownload() {
            //JSONデータの取得
            var content = <?= getData(); ?>;
            //ダウンロード用URL生成
            var blob = new Blob([content], { "type": "application/json" });
            document.getElementById("download").href = window.URL.createObjectURL(blob);
        }
    </script>
</head>
<body>
    <!-- JSONダウンロードボタン:json名は適宜設定してください-->
    <a id="download" href="#" download="download_file.json" onclick="handleDownload()">ダウンロード</a>
</body>
</html>

スプレッドシートをリロードすると、こんな感じでメニューバーに追加され、jsonファイルとしてダウンロードできるようになります。
image.png

未実装のもの

全て文字列となるので、nullやbooleanやDate型は各自要件に応じて対応してください。

追記

  • 空白のセルはnullとして扱うように修正しました
  • 元々booleanやData型には自動変換してくれてました
  • 空文字を扱いたい場合は""を使ってください

参考

コード
https://ribbit.konomi.app/blog/gas-json

ダウンロードUIの作り方

https://qiita.com/Yami_37/items/b4ed2bd2e20ffe7dfbca

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?