はじめに
What is this
Googleドライブの特定の名称のフォルダ内に格納したcsvファイルを全て読み取り、
シートに出力するGoogle App Scriptと、
スプレッドシートを外部公開することで、URLのクエリパラメータのコピペのみでjsonファイルを公開する手順を示しました。
背景
pythonsスクリプトでcsvをスクレイピングしてjson出力する方法を示しましたが、
csvをサーバーに置く前の段階として、しばらくcsvデータをメールで受領する時期がありました。
- 今後の運用を踏まえるとjsonデータを読みとる方法は変えたくない
- 可能な限りjsonデータ化する手間を少なくしたい
の2点を解決するため、下記のようなフローを考えました。 - メールで受領したcsvを特定のGoogleドライブフォルダにアップロードする
- 自動でスプレッドシートのデータが更新される
- googleスプレッドシートから出力したjsonファイルから情報取得する
本件ではその説明をしています。
ソースコード
how to use
csvファイルの読み込み
本コードをGoogle App Scriptにコピーし、CSVを格納するフォルダ名を任意の名称に変更してください。
※直下のフォルダでなくとも使用できますが、固有名詞としてください
csvを格納し、本スクリプトを実行するとcsvを読み取り、スプレッドシートにファイル名のシートを作成します。
(すでにシートが作成されている場合はclear
します)
APIとしてスプレッドシートを出力する方法
技術仕様
csv2json_gas.gs
function csv2json() {
//書き込む対象のSpread Sheetを定義
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
// 対象のCSVファイルが置かれているフォルダ名、ファイル名を定義
var folderName = "data";
var folders = DriveApp.getFoldersByName(folderName);
while (folders.hasNext()) {
var folder = folders.next();
if (folder.getName() == folderName) {
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var sheetName = file.getName();
sheetName = sheetName.substr(0,sheetName.length-4);
var sh = ss.getSheetByName(sheetName);
if(sh == null)
{
ss.insertSheet(sheetName);
sh = ss.getSheetByName(sheetName);
}
else
{
sh.clear()
}
var data = file.getBlob().getDataAsString("Shift_JIS");
var csv = Utilities.parseCsv(data);
sh.getRange(1,1,csv.length,csv[0].length).setValues(csv);
}
return;
}
}
}
- フォルダ内の全データを対象にしている
- ファイル名からシート名を抽出、シートが無ければ新たに生成、あればシートをcleanする
- コードを簡略化するため、エラーケースは未考慮(csv以外のファイルを入れないこと)
参考
Google Apps ScriptでCSVファイルをGoogleスプレッドシートにインポートする
https://qiita.com/YusukeKameyama/items/5ae840ec8d4382a215db