きっかけ
- たくさんの csv ファイルを 1 つの Excel ファイルにまとめたい場合、Ruby でなんとか出来ないか考えた
- どうやら Ruby から Excel を扱う方法があるらしい
- でも、
win32ole
やらspreadsheet
やらCSV
があってややこしいので整理してみた
Win32OLE
- Win32OLE は Ruby 1.8 から標準で組み込まれている
- ただし、おそらく、それは Windows 版の Ruby のことかと思われる...
- 作業環境が Windows 以外はだめっぽい
- 試しに Ubuntu 13.04 環境で
gem install win32ole
してみたけどダメ
spreadsheet
- Windows 以外の環境でも
xls
の拡張子がついたファイルを読み書き出来る - ただし、
xlsx
はダメらしい
インストール
gem
コマンドで一発。
gem install spreadsheet --no-ri --no-rdoc -V
ブックを作成する
以下の通り、簡単なスクリプトを書いてみる。
実行すると...
おお。とりあえずファイルが作成されている。
CSV ファイルを読み込んでブックを作成する
上記のような CSV
ファイルを作成する。ファイルは UTF-8
で保存し、レコードの最後も ,
を残しておくのがキモだと思う。
そして、以下のようなスクリプトを作成して CSV
ファイルを読み込んでブックを作成する。
i = "#{arr[0]}".to_i
しないと
以下のようなエラーが出てしまうので注意する。
/var/lib/gems/1.9.1/gems/spreadsheet-0.8.9/lib/spreadsheet/worksheet.rb:235:in \`[]': can't convert String into Integer (TypeError)`
ああ、なるほど。String
ではないんですな。
実行すると...
おお、いけた、いけた。
CSV ファイルを読み込んでブックを作成する(2)
たいした変更ではないが、以下のような CSV
を読み込んで、フラグ( a or b )によって表示を変えてブックを作成してみる。
以下のようなスクリプトを作成して実行する。
おお、これもいけた、いけた。
ということで
- 次にたくさんの CSV ファイルを扱う機会があったら試してみようかね