Jakarta POI

Jakarta POIはMicrosoft OLE2 複合ドキュメント形式ファイルをJavaから直接読み書きするためのライブラリです.OLE2複合ドキュメント形式というのは,簡単に言うとExcelとかWordのファイルのことです.

今日,ひょんなことからこのライブラリについて思い出しました.2年半くらい前,このライブラリを使ってプログラムを書いたことがあります.

今はどうなのかは分かりませんが,当時はPOIはマルチバイトコード対策があまりちゃんと行われておらず,文字列の合計が約8000バイトを超えた際に生じる文字列用レコードと続きのレコードの間の部分にマルチバイト文字が来ると,それ以降のOffSetの処理を正しく行えず,例えばNegativeArraySizeExceptionなどよって最終的には例外が発生して落ちるというバグがありました.

その時はこんな資料などを読みつつ,パッチを自作して何とかした記憶があります.
http://www.favo.it/upload/1/4.pdf

その際OLE2複合ドキュメントをHEXダンプしてくれるツールとかもVectorから落としてきて使っていた記憶もあります.

あれから2年半,いまはどうなんですかね.もしかしたら物凄くクオリティが上がっているのかもしれませんが.

Jakarta POIは,仕様(ファイルフォーマット)さえ分かれば後は腕力次第で何でもできるのだということをあの時僕に教えてくれました.(MS社によるソフトのファイルを読んじゃうわけですよ,オープンソースのライブラリが.)

もうあの時の具体的な内容についてはほとんど記憶に残っていません.BlogかWikiかにログを残していたらなーと思うと残念です.いま書いていることが2年後に役立てばなーと思う今日この頃です.