10
13

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 5 years have passed since last update.

GASでスプレッドシートをjsonに変換してダウンロード

Last updated at Posted at 2016-03-03

リソースファイルの管理・運用に共同作業が可能で、操作もエクセルライクで扱い易いGoogleDriveのスプレッドシート。
このスプレッドシートを実際のリソースとして扱う際はJsonに変換するという方も少なくないはず。
そのような時は、ファイルをcsv書き出し -> jsonに変換するスクリプトを別途用意して、処理するという手順をとるかと思います。
しかし、できれば直接スプレッドシートの編集画面上からjsonをダウンロードできないものかと思い、 GASで作ってみました。

サンプルはこちらのGistに書いてありますので、重要な箇所だけを解説していきます。

JSONファイルをGoogle Drive上に作成

直接ファイルをダウンロードさせる方法が見つからなかったので、一度Json形式のテキストをGoogle Drive上にファイルとして作成します。

download_json.js
  var folder = DriveApp.getFolderById(folderId);
  
  body = renderToJson(data);
  
  var blob = Utilities.newBlob("", contentType, fileName).setDataFromString(body, charSet);

ダウンロードダイアログを表示

作成したファイルのurl、およびプレビュー用のbodyをグローバル変数として用意しておきます。

そして、"donwload.html"という名前でテンプレートファイルを作成して

download_json.js
  body = renderToJson(data); // プレビュー用

  var blob = Utilities.newBlob("", contentType, fileName).setDataFromString(body, charSet);

  var fileId = DriveApp.getFolderById(folderId).createFile(blob).getId();
  url = "https://drive.google.com/uc?export=download&id=" + fileId; //ダウンロード用URL
  
  var output = HtmlService.createTemplateFromFile('download');
  var html = output.evaluate().setHeight(420).setWidth(600);
  var ui = SpreadsheetApp.getUi();

  ui.showModalDialog(html, fileName);
download.html

<style type="text/css">

# json {
  height: 320px;
  overflow: scroll;
  border:1px solid #ddd;
  padding:10px;
}

</style>

<pre align="left" id="json">
<?
output.append(body);
?>
</pre>

<div align="center">
<?
output.append("<a href='" +  url + "' target='_blank'>ダウンロード</a>");
?>
</div>

スプレッドシートに書き出しメニューの追加

スプレッドシートにメニューを追加する方法は、以下のようになってます。
functionNameに呼び出す関数名を指定することで、ボタンを押した時に指定された関数が呼び出されます。

download_json.js
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "シートをJSONで出力",
    functionName : "showDialogDowloadJson"
  }];
  spreadsheet.addMenu("書き出し", entries);
};
10
13
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
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?