業務システム開発において、Excelファイルの入出力は避けては通れない要件だと思います。帳票出力やデータのインポート/エクスポートなど、Excelを扱う場面は多岐にわたります。本記事では、JavaでExcelファイルを操作できる主要なライブラリについて比較していきます。
紹介するライブラリ一覧
| ライブラリ | 開発元 | ライセンス | 対応形式 | |
|---|---|---|---|---|
| 1 | Apache POI | Apache Software Foundation | Apache 2.0 | xls / xlsx |
| 2 | FastExcel(旧EasyExcel) | Alibaba → 個人OSS | Apache 2.0 | xls / xlsx |
| 3 | JXLS | jxls.sourceforge.net | Apache 2.0 | xls / xlsx |
| 4 | FastExcel(dhatim) | dhatim | Apache 2.0 | xlsx |
1. Apache POI
概要
Apache POIは、JavaからMicrosoft Officeフォーマットを操作するための最も歴史のあるOSSライブラリです。Excelに限らずWord(HWPF/XWPF)やPowerPoint(HSLF/XSLF)にも対応しています。
Excel操作においては以下のAPIが提供されています。
- HSSF - 旧形式(.xls / BIFF8)の読み書き
- XSSF - 新形式(.xlsx / OOXML)の読み書き
- SXSSF - XSSFのストリーミング版。大量データの読み書きに最適化
- SS - HSSF/XSSFを統一的に扱う共通インターフェース
メリット・デメリット
メリット
- 機能が非常に豊富(グラフ、数式、ピボットテーブル、条件付き書式、画像挿入など)
- .xlsと.xlsxの両方に対応
- コミュニティが大きく、日本語情報も豊富
- SXSSFによる大量データ書き込みにも対応
デメリット
- ライブラリ自体が大きく依存関係も多い
- XSSFでの読み書きはメモリ消費が大きい(ファイル全体をメモリに展開する)
- SXSSFにはスライディングウィンドウ方式の制約がある(書き込み済みの行へのアクセス不可)
- APIが冗長になりがち
2. FastExcel (旧EasyExcel / Alibaba)
概要
EasyExcelはAlibabaが2018年にOSSとして公開しました。2023年にオリジナル作者がAlibabaを退職後、FastExcelとしてリブランドし開発が継続されています(Alibaba側のEasyExcelはメンテナンス終了)。内部的にはApache POIのSAXパーサーを利用しつつ、ストリーミング方式でメモリ消費を大幅に抑えています。最大の特徴はアノテーションベースのJavaオブジェクトマッピングで、Spring Bootとの相性が良く、業務アプリケーションのインポート/エクスポートを素早く実装できます。
メリット・デメリット
メリット
- アノテーションベースでJavaオブジェクトとExcelを直接マッピングできる
- ストリーミング方式で大量データでもOutOfMemoryが発生しにくい
- テンプレートへのデータ充填(fill機能)に対応
- Spring Bootとの統合が容易(MultipartFile・HttpServletResponseとの連携)
デメリット
- 内部でApache POIを使用しているため、Apache POIとのバージョン統合に注意が必要
- 日本語のドキュメントがほぼない(中国語・英語中心)
- グラフ作成やピボットテーブルなどの高度な機能は非対応
3. JXLS
概要
JXLSは、Excelテンプレートに特殊なマークアップを埋め込み、Javaからデータを差し込んで帳票を生成するライブラリです。内部的にはApache POIを利用しており、Java 17以降が必要です(JXLS 3.x)。
定型帳票の出力に非常に強く、テンプレートさえ作ればJava側のコード量を大幅に減らせます。
メリット・デメリット
メリット
- Excelテンプレートにデータを差し込む方式で、帳票のレイアウト変更に強い
- ループ処理( jx:each )や条件分岐( jx:if )をテンプレート内で表現可能
- 複雑なレイアウトの帳票でもJava側のコードがシンプルに保てる
デメリット
- テンプレートのマークアップ記法(セルコメント方式)の学習が必要
- 内部でApache POIに依存
- デバッグがやや難しい(テンプレート側の問題か、データ側の問題かの切り分け)
- 大量データの場合は、パフォーマンスに注意が必要
4. FastExcel (dhatim)
概要
dhatim社が開発したFastExcelは、Apache POIのメモリ消費量の多さを解決するために生まれたライブラリです。機能はシンプルですが、xlsxの読み書きを高速かつ低メモリで行える点が最大の強みです。
Apache POIへの依存がなく独自にOOXML(xlsx)を生成するため、ライブラリサイズも非常に小さく保たれています。APIもシンプルで、必要最低限のExcelファイルを高速に生成したい場合に適しています。
メリット・デメリット
メリット
- Apache POIと比較してメモリ消費が大幅に少ない
- Apache POIへの依存がなく、ライブラリサイズが小さい
- APIがシンプルで学習コストが低い
- Java Stream APIと親和性が高い
デメリット
- xlsxのみ対応(xls非対応)
- グラフ、数式計算、ピボットテーブルなどの高度な機能は非対応
- スタイル設定は基本的なもの(太字、フォント色、背景色、罫線など)に限定
- 日本語での情報が少ない
まとめ
Javaには多くのExcel操作ライブラリが存在しますが、現在の実質的な選択肢は以下に整理できます。
Apache POIはデファクトスタンダードであり、機能面で非常に優れています。ただしメモリ消費と依存関係の大きさがトレードオフです。
FastExcel(旧EasyExcel)はアノテーションによるオブジェクトマッピングが魅力で、Spring Bootベースの業務アプリケーションとの親和性が抜群です。
JXLSはテンプレートベースでの帳票出力に特化しており、複雑なレイアウトの帳票を効率的に生成できます。
FastExcel(dhatim)はパフォーマンス重視のシナリオで真価を発揮します。Apache POI非依存で軽量なため、シンプルなデータ出力に最適です。
プロジェクトの要件に合わせて適切なライブラリを選択することが大切です。

