ハジカラ 〜はじめからでも、プログラミング勉強〜

入門向けに、IT関連(javaやKotlin)をコツコツ書いたり検証したりします。

Home » Java » Apache POIでエクセル操作を作ってみて〜XSSFとSXSSFの違い

Apache POIでエクセル操作を作ってみて〜XSSFとSXSSFの違い

calendar

こんにちは、けーどっとけーです😀

最近Apache POIでエクセル資料を作成する機会があったので、忘れないうちにまとめておこうと思います。
主にXSSFとSXSSFの違いに関してです。
参考になれば幸いです。

Apache POIとは、WordやExcelといったMicrosoft Officeのファイルを読み書きできるJavaのライブラリです。
使用するにはPOIのJarファイルをダウンロードしてJavaのライブラリに読み込めば、コーディングで使用できるようになります。
バージョンはこちらの最新(POI 4.1.2)を使用しています。

スポンサーリンク

Apache POIでExcel編集

Excelの.xls形式(Excel2003まで使われていた形式)ではHSSFを使用し、.xlsx形式(Excel2007以降で使用される形式)ではXSSFまたはSXSSFを使用します。

使用しているExcelは2007以降なので、XSSFとSXSSFを使用しました。
今回は、このXSSFとSXSSFの違いで試行錯誤していました。

Apache POIのXSSFとSXSSFの違いを知る

基本的に、XSSFとSXSSFの使い方は同じです。
XSSFの場合はXSSFWorkbookを使ってExcelの作成を行い、行を指定し列を指定し読み込みや書き込みを行います。
SXSSFの場合はSXSSFWorkbookを使います。

ではその違いは、XSSFに対しSXSSFはメモリ抑えめの出力を行うとのことです。

もしXSSFで大量のデータを出力した際に、OutOfMemoryエラーが発生する場合があるとのことです。(実際はこのエラーの発生は確認していませんが・・。)
このエラーを避ける場合に、SXSSFを使うことが望まれるようです。

そうであれば、SXSSFだけ使ってコーディングを行えばいいと思うのですが、使ってみて実際はそうではありませんでした。
SXSSFは、XSSFに比べて自由度が低いという印象です。

例えば以下のようなExcelテンプレートを読み込んで以下のセルに書き込みをしようとした場合はエラー(java.lang.IllegalArgumentException)が発生します。
SXSSF エラー

しかし以下の場合のセル書き込みは正常に行われます。
SXSSF 正常

Excelテンプレートを使用する場合は、先に行にデータが入っていると、SXSSFが行を取得した時点でエラーが発生するようです。
データを下に追加していく形であれば、まっさらな行にデータを追加していくだけなのでSXSSFが使用できます。
複雑なテンプレートを使用する場合は、XSSFを使った方がいいかと思います。

今回の一言

かなり前提を端折って書きましたが、ぜひ一部でも参考になれば。
思った以上にApache POIでできる操作が多いようなのでこれからも使って理解を深めていきます。

ここまで読んでくれてありがとう。
では、また次回。