POIのライブラリのバージョンを上げる作業をしました。
今までxls形式を扱っていたため古いバージョンでも動いていたのですが、今度はxlsxを扱う必要がでてきたためです。
xlsx形式は、確かPOI 3.5くらいから対応していたと思います。
バージョンを上げるにあたって、POI関連のjarファイルを差し替える必要があります。
具体的には、以下のjarファイルたちです。
poi-3.X-YYYYMMDD.jar poi-excelant-3.X-YYYYMMDD.jar poi-ooxml-3.X-YYYYMMDD.jar poi-scratchpad-3.X-YYYYMMDD.jar
これらのjarファイル差し替えに加え、HSSFWorkbookを始めとする「HSSF」系のクラスを一通りXSSFWorkbookのような「XSSF」系のクラスに置き換えました。
その他もろもろ、コンパイルエラー部分を修正していき、最後に、読み込ませていたテンプレートファイルのxlsをxlsx形式に変換しました。
動かしてみると以下のエラーが発生…
java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTSheet
NoClassDefFoundError
はたまに見かけますが、たいていはアプリケーションサーバ側の設定が不足しているといった他の原因である場合が多かったです。
とりあえず、エラー文で調べてみると以下の記事がヒット。
どうやらpoi-ooxml-schemas-3.X-YYYYMMDD.jar
が無いのが原因だったようです。
該当バージョンのjarファイルを探してライブラリに追加したところエラーが変わり、dom4j-1.6.1.jar
も追加することでようやく解消しました。これも記事に記載されています。
「NoClassDefFoundError」は本来、クラス定義が見つからない場合に発生するエラーです。今回は素直に受け止めてよかったようです。
ただ、何が見つからないといわれているのかが分からないエラー内容でした。