JavaExcelAPI 2.6.12 で NullPointerException

Excel の読み書きに、JavaExcelAPI(http://jexcelapi.sourceforge.net/)をよく使っています。

JavaExcelAPI は意外とクセがあるので、細かなところになるとエラーが出て苦労します。
それは同じような Excel 読み書き OSS の Apache POI についても言えることだと思いますが。

とりあえず、最近見つけたソリューションログをメモ。

JavaExcelAPI 2.6.12 を使っていたら次のような例外が発生しました。

java.lang.NullPointerException
at jxl.biff.DVParser.<init>(DVParser.java:669)
at jxl.biff.BaseCellFeatures.getDVParser(BaseCellFeatures.java:501)
at jxl.write.biff.SheetWriter.writeDataValidation(SheetWriter.java:1137)
at jxl.write.biff.SheetWriter.write(SheetWriter.java:581)
at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1558)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:950)

マクロが入っているブックや数式がおかしなことになっているブックを読み書き対象にすると、こういった例外がよく発生します。ということで、なにが原因かを調べてみましたが今回はわからず。

悩んだ結果、ダウングレードして JavaExcelAPI 2.6.10 を使うようにしたら解決しました。
この例外は発生しなくなりました。

とりあえず、2.6.12 依存の処理もしていないので(それ以前に 2.6.12 依存の処理がどういうものかも把握していない)、とりあえずダウングレードで様子を見てみます。

Excel 読み書きの精度はよくない

JavaExcelAPI にしろ、Apache POI にしろ、完璧に Excel を読み書きできないです。
単純な Excel であれば大丈夫ですが、マクロが入っているとそこそこの確率で読み込時に例外が発生します。
オブジェクトを使っていると、そのまま読んで書き出すだけだったとしてもオブジェクトが消えたりとか。

アウトプットの完成度が低くなってしまうので、ストレスがたまります。

そもそも、Excel 読み書き

で、なんで Excel を読み書きするかというと、設計書が Excel だから…
Excel 方眼紙で設計書なんて書かなければ、Excel 読み書きなんてしなくていいのです。