Googleドライブのフォルダに格納したcsvファイルをGASで読み取りスプレッドシート->json化して出力する
はじめに
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以外のファイルを入れないこと)
参考
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;
}
}
}
Google Apps ScriptでCSVファイルをGoogleスプレッドシートにインポートする
https://qiita.com/YusukeKameyama/items/5ae840ec8d4382a215db
Author And Source
この問題について(Googleドライブのフォルダに格納したcsvファイルをGASで読み取りスプレッドシート->json化して出力する), 我々は、より多くの情報をここで見つけました https://qiita.com/iori_ama/items/b6cf9c8ee901884d0305著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .