ようへいの日々精進XP

よかろうもん

Ruby から Excel を扱うメモ

きっかけ

  • たくさんの 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

ブックを作成する

以下の通り、簡単なスクリプトを書いてみる。

実行すると...

f:id:inokara:20130914063927p:plain

おお。とりあえずファイルが作成されている。

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 ではないんですな。

実行すると...

f:id:inokara:20130914072402p:plain

おお、いけた、いけた。

CSV ファイルを読み込んでブックを作成する(2)

たいした変更ではないが、以下のような CSV を読み込んで、フラグ( a or b )によって表示を変えてブックを作成してみる。

以下のようなスクリプトを作成して実行する。

f:id:inokara:20130914081147p:plain

おお、これもいけた、いけた。


ということで

  • 次にたくさんの CSV ファイルを扱う機会があったら試してみようかね