RubyでExcel操作(spreadsheet)

Excelを読み取り内容をDBに格納するプログラムを書くのに
Javaのpoiで行こうかと思ったけれど、poiは数値フィールドをdoubleとして取得するため、
「23」という値が23.0となってしまう。
今回のデータでは「23.0」と「23」を明確に分けて取得する必要があるためpoiは却下。
Rubyのspreadsheetというgemを使ってみたらびっくりするぐらい簡単に取得できたのでメモ。

require 'rubygems'
require 'spreadsheet'

xls = Spreadsheet.open('excel.xls', 'rb')
sheet = xls.worksheet(0)

puts sheet[0, 0]

こんだけ。
まず、spreadsheetのgemをインストール

gem install 'spreadsheet'

Spreadsheet.openでエクセルを取得し、
xls.worksheet(0)で0番目のシートを取得。

sheet[0, 0]で0行0列を取得。
いとも簡単に「23」が取得できた。

で、OKかと思いきや今度はExcel内の関数評価に問題有り。
sheet[0, 0]でcellに関数が入っている場合はSpreadsheet:formulaが取得できるので、
formulaのメソッドvalueを叩けば良い。

sheet[0, 0].value

ただし、評価の仕方が問題で、cellに「=ROUNDUP(100/3, 3)」という関数が入っていた場合、
Excel上では「33.333」になるのに対して、spreadsheetで取得できた値は「33.333999999999996」。
コレでは使いものにならない....

次はPHPのPHPExcelを試そう。