5
7

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

Googleドライブのフォルダに格納したcsvファイルをGASで読み取りスプレッドシート->json化して出力する

Last updated at Posted at 2020-04-17

はじめに

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します)
スクリーンショット 2020-04-17 13.53.31.png
スクリーンショット 2020-04-17 13.53.25.png

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

5
7
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
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?