POIを使うにあたって、気をつけたいことをまとめる。

JavaでExcelの読み書きができるライブラリ。
現在のバージョンは3.9。(2012年12月現在)

POIは「Poor Obfuscation Implementation(質の悪い難読な実装)」の略。
これはExcel仕様のことを指している皮肉。

このことからわかるようにExcel自体が整然としていないのだから、
それに対応するPOIもうまくいかない部分ができてしまう。
(単純な読み書きなら気をつければ問題ない)

よって複雑なことをやろうとすると壁にぶつかることもあるので、
そのへんをまとめる。

「読み込み」で注意しておきたいこと

精度や型に関してはJavaよりPOIがゆるいため、
次のような点に注意が必要。

正確な数値の読み込みはできない

POIが用意する数値取得メソッドはdouble型を返すものなので、
小数点以下の正確な値をとるのはあきらめざる得ない。

また整数値であってもdouble型で取得するので
型変換をしなくてはいけない。

日付型があいまい

日付もcellstyleとしてはCELL_TYPE_NUMERIC(数値)判定される。
だから、こちらから意図的にDate型で取得しないとダメ。

例えばExcelで「yyyy/mm/dd」形式で入力しても文字と判定される可能性がある。
よって、日付型の取得の場合は文字列で取得してdateパースするリトライをしていた方が安全。

あくまでもそのセルの入力値で判定される

例えば「123」と入力してセルの書式指定を文字としても、
取得するときはCELL_TYPE_NUMERIC(数値)判定される。

そのときStringで取得しようとすると例外になってしまう。
文字列セルでも結果数字しかないことが考えられる場合は、注意する必要がある。