[Ruby on Rails] CSVインポート/エクスポート

Ruby on Rails で、CSVのインポート/エクスポート機能を実装する上での参考情報をご紹介します。

Ruby 1.9 は FasterCSV が標準の CSV クラスとして採用されているので、require “csv” すればすぐに使える。

FasterCSV Documentation

Class: CSV (Ruby 1.9.3)

CSVインポート/エクスポート実装サンプル

RailsCast

Ruby on Rails Screencasts – RailsCasts

CSVインポート

#396 Importing CSV and Excel – RailsCasts

roo というスプレッドシート(Open Office, Excel, Google Spreadsheetsなど)を操作する gem を使っている。

Empact/roo · GitHub

roo:スプレッドシートを操るRubyライブラリ « TORQUES LABS

CSVエクスポート

#362 Exporting CSV and Excel – RailsCasts

Ruby1.9とRailsでCSV出力(SJIS) #Rails #Ruby – Qiita

[rails] csvつくって出力するのよメモ | おれせか


CSVの文字コード変換

CSVファイルはExcelから作成されることが多くて、文字コードをShift_JISからUTF-8へ変換して扱う必要があります。

その辺のノウハウがまとめられています。

CSV を文字コード変換しつつロード #Ruby – Qiita

rails c で CSV ファイルをアップロードする

普通はテストで使う fixture_file_upload メソッドで CSV ファイルをアップロードしてから、モデルに追加したクラスメソッド import を呼び出してやります。

> include ActionDispatch::TestProcess
> file = fixture_file_upload "tmp/test.csv", "text/comma-separated-values"
 => #<Rack::Test::UploadedFile:0x007fa36b03f960 @content_type="text/comma-separated-values", @original_filename="test.csv", @tempfile=#<File:/var/folders/46/bg9j7wkn5qg9n895016mlvk00000gn/T/test.csv20130124-12060-h3mn08>> 
> Product.import(file)
   (0.2ms)  BEGIN
["a", "b", "c", "d"]
["1", "2", "3", "4"]
   (0.1ms)  COMMIT
 => <#CSV io_type:File io_path:"/var/folders/46/bg9j7wkn5qg9n895016mlvk00000gn/T/test.csv20130124-12060-h3mn08" encoding:UTF-8 lineno:2 col_sep:"," row_sep:"\r" quote_char:"\"">

参考情報