普通にApache Poiを使うと
こんな感じのコードが基本になる。
Javaでexcelを読み書きするサンプル(Apache POIの使い方まとめ)
しかし、これだと、大容量のExcelファイルを読み込もうとするとOutOfMemoryErrorを吐いて落ちてしまう。
ではどうする?
そもそも大容量のExcelファイルをApachePoiで読むのが間違っているということにしてフォーマットを変えてもらう、のが一番だが、そうはいかないこともある。
Stack Overflowにも質問があり、回答が付いていた。
java - How to load a large xlsx file with Apache POI?
excel-streaming-reader というのがあるとのこと。
サンプル
githubにサンプルコードが載っているので、そちらを読んで頂いた方が確実。
使ってみた感想
- 大容量のExcelファイルを読み込んでも落ちなくなったので有り難い。
- githubにも記載されているが、実装されていないメソッドを読み込むと、NotSupportedExceptionで落ちるので注意。
- どのメソッドがサポートされているかどうか、は実装コードを読まないと分からない。
- 実装されていないととっても困る、というものは無いはず。
まとめ
そもそも、大容量のExcelファイルを読まないといけない、という前提が間違っている。
データ移行はともかく、通常運用では使わなくて済む方向にもっていくべし。