RoR (ruby 1.8.7) でXLSXを読む
Ruby on Rails でXLSX形式のExcelシート(OOXML)を読むべく、悪戦苦闘してしまった。
原因は、たぶん、環境が古いからだろう。
Ruby 1.8.7
Rails 3.2.13
という状況なので、最新のGEMはほぼ入らない。
まず試したのが[rubyXL]だ。バージョンは1.1.12を入れた。
これでXLSXファイルを読むと、あら不思議、所々指定外のセルを読み込んでしまう。これがまた、MS Officeのブックはダメで、LibreOfficeだとOKだったりする。正しく読めないファイルをLibreOfficeで保存し直すと読めるのだが。
次に、[spreadsheet]を試してみたが、もともとこれはXLSXには対応していない。XLS(BIFF)のブックは正常に読み込めたので、旧形式だけで良ければこれもアリかも。
で、[roo]を入れた。バージョンは1.10.1だ。これはなかなかよろしい。XLSXでもXLSでも、今のところ正しく読めている。拡張子がちゃんと付いていればファイル形式を自動認識してくれるので同じルーチンでBIFFもOOXMLも読めてしまうのだ。
なお、rooを入れるにあたり、rubyzip 0.9.9もインストールが必要だった。Gemfileに
gem 'rubyzip', '~> 0.9.9' gem 'roo', '~> 1.10.1'
を追記して、Controllerでは
s = Roo::Spreadsheet.open(work_file) s.default_sheet = s.sheets[0] # 最初のシート s.first_row.upto(s.last_row) do |i| # s.cell(i, 1) で Aカラムが読み出せる end
みたいな感じ。