
Java を 使用した Excel ファイルの読み取りは、特にレポート、財務データ、ユーザーレコード、サードパーティとの連携を扱う際に、エンタープライズアプリケーションでよく求められる要件です。データインポート機能の構築、スプレッドシート分析の実行、Web アプリケーションへの Excel 解析の統合など、いずれの場合でも、Java で Excel ファイルを効率的に読み取る方法を学ぶことは不可欠です。
本チュートリアルでは、Java を使用して .xls および .xlsx ファイルを読み込む方法を解説します。さらに、実践的な Java コード例を通じて、大容量ファイルの処理、InputStream からの読み込み、行単位でのデータ取得方法なども紹介します。
- 1. Java プロジェクトのセットアップ
- 2. Java で XLSX/XLS ファイルを読み込む方法
- 3. 大容量 Excel ファイルを読み込む際のベストプラクティス
- 4. 完全なサンプル:Java で Excel ファイルを読み込むプログラム
- 5. まとめ
- 6. FAQs
1. Java プロジェクトのセットアップ
Java で Excel ファイルを読み込むには、スプレッドシート形式に対応したライブラリが必要です。Spire.XLS for Java は、.xls(旧 Excel 形式)と .xlsx(XML ベースの新形式)の両方をサポートしており、Excel ファイルの読み込みを簡単に行える高水準 API を提供しています。
Spire.XLS をプロジェクトに追加する
Maven を使用している場合は、以下を pom.xml に追加してください。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>16.4.1</version>
</dependency>
</dependencies>
Maven を使用していない場合は、公式の Spire.XLS サイトから JAR ファイルをダウンロードし、classpath へ追加することも可能です。
小規模な Excel 処理であれば、Free Spire.XLS for Java を利用することもできます。
2. Java で XLSX/XLS ファイルを読み込む方法
Java では、Workbook を読み込み、ワークシート・行・セルを順番に走査することで Excel ファイルを簡単に読み込めます。
.xlsx は現在主流の Excel 形式であり、.xls は旧来のバイナリ形式です。Spire.XLS では、同じコードで両形式をシームレスに扱うことができます。
Excel ファイル(XLSX/XLS)の読み込み
以下は、Excel ファイルを読み込んで内容を出力する基本的なサンプルです。
import com.spire.xls.*;
public class ReadExcel {
public static void main(String[] args) {
// Workbook オブジェクトを作成し、Excel ファイルを読み込む
Workbook workbook = new Workbook();
workbook.loadFromFile("data.xlsx"); // または "data.xls"
// 最初のワークシートを取得
Worksheet sheet = workbook.getWorksheets().get(0);
// 使用されている行と列をループ処理
for (int i = 1; i <= sheet.getLastRow(); i++) {
for (int j = 1; j <= sheet.getLastColumn(); j++) {
// セルのテキストを取得
String cellText = sheet.getCellRange(i, j).getValue();
System.out.print(cellText + "\t");
}
System.out.println();
}
}
}
ファイルパスを .xls ファイルに置き換えても、コードは変更されません。これにより、形式に関係なく Java を使用して Excel ファイルを簡単に読み取ることができます。
読み込んだ Excel ファイルとコンソール出力例:

行オブジェクトを使って Excel を1行ずつ読み込む
ユーザー入力の検証や業務ルールの適用などでは、各行を1件のデータとして処理したい場合があります。そのような場合は、getRows() メソッドを使って行単位で Excel を読み込むことができます。
for (int i = 0; i < sheet.getRows().length; i++) {
// 行を取得
CellRange row = sheet.getRows()[i];
if (row != null && !row.isBlank()) {
for (int j = 0; j < row.getColumns().length; j++) {
String text = row.getColumns()[j].getText();
System.out.print((text != null ? text : "") + "\t");
}
System.out.println();
}
}
この方法は、バッチ処理や行単位でデータを扱うケースに特に適しています。
InputStream から Excel ファイルを読み込む
Web アプリケーションやクラウドサービスでは、Excel ファイルをストリーム形式で受け取ることが一般的です。
以下は、InputStream から Excel を読み込む方法です。
import com.spire.xls.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class ReadExcel {
public static void main(String[] args) throws FileNotFoundException {
// InputStream を作成
InputStream stream = new FileInputStream("data.xlsx");
// ストリームから Excel を読み込む
Workbook workbook = new Workbook();
workbook.loadFromStream(stream);
System.out.println("Excel ファイルを正常に読み込みました。");
}
}
これは、ファイルアップロード、メールの添付ファイル、またはリモートストレージに保存された Excel ファイルを処理する場合に役立ちます。
さまざまな形式でセル値を取得する
Excel ファイルを読み込み、セルへアクセスできるようになると、Spire.XLS を使用して、書式設定されたテキスト、生の値、数式など、さまざまな形式でコンテンツを読み取ることができます。
以下はその例です。
CellRange cell = sheet.getRange().get(2, 1); // B2
// Excel 上で表示されるテキスト
String text = cell.getText();
// 生の文字列値
String value = cell.getValue();
// 汎用オブジェクト(数値、真偽値、日付など)
Object rawValue = cell.getValue2();
// 数式
String formula = cell.getFormula();
// 数式の計算結果
String result = cell.getEnvalutedValue();
// 数値セル
double number = cell.getNumberValue();
// 日付セル
java.util.Date date = cell.getDateTimeValue();
// 真偽値セル
boolean bool = cell.getBooleanValue();
ヒント:getValue2() は実際のオブジェクトを返すため、柔軟な処理に向いています。getText() は Excel 上の表示内容を取得したい場合に便利です。
関連記事:Java で Excel ファイルにデータを書き込む方法
3. 大容量 Excel ファイルを読み込む際のベストプラクティス
Excel ファイルに数万行のデータや複数シートが含まれている場合、パフォーマンスが問題になることがあります。
効率的に大容量 Excel ファイルを読み込むために、以下のポイントを意識しましょう。
- 必要なシートのみをロードする
- 関連する列または行にのみアクセスする
- ワークシート全体をメモリへ保持しない
- 行ごとの読み取りパターンを使用する
以下は、空でない行のみを処理する効率的な例です。
for (int i = 1; i <= sheet.getRows().length; i++) {
Row row = sheet.getRows()[i];
if (row != null && !row.isBlank()) {
// データが存在する行のみ処理
}
}
Spire.XLS 自体も効率的なメモリ管理を行っていますが、これらのベストプラクティスを守ることで、よりスケーラブルな Excel 処理を実現できます。
参照:Java を使用して Excel の空白行と列を削除する
4. 完全なサンプル:Java で Excel ファイルを読み込むプログラム
以下は、名前、メールアドレス、年齢、部署、ステータスなどの拡張列を持つ Excel ファイル(users.xlsx)を読み取る、完全に動作する Java の例です。コードは最初の3列(name, email, age)のみを抽出し、年齢が30歳以上のユーザーに絞り込んで出力します。
import com.spire.xls.*;
public class ExcelReader {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("users.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
System.out.println("名前\tメールアドレス\t年齢");
for (int i = 2; i <= sheet.getLastRow(); i++) {
String name = sheet.getCellRange(i, 1).getValue();
String email = sheet.getCellRange(i, 2).getValue();
String ageText = sheet.getCellRange(i, 3).getValue();
int age = 0;
try {
age = Integer.parseInt(ageText);
} catch (NumberFormatException e) {
continue; // 年齢データが不正な行をスキップ
}
if (age >= 30) {
System.out.println(name + "\t" + email + "\t" + age);
}
}
}
}
実行結果:

このコードは、Java で Excel ファイルから特定のセルを読み取り、年齢などのデータにフィルターを適用するなど、意味のある表形式のデータを出力する方法を示しています。
5. まとめ
本記事では、Spire.XLS for Java を使用して、Java で .xls および .xlsx ファイルを読み込む方法を紹介しました。
主に以下の内容を学びました。
- Java プロジェクトを Excel 読み取り機能付きでセットアップする方法
- 行単位・ストリームベースで Excel を読み込む方法
- 同一 API で旧形式・新形式を扱う方法
- 大容量 Excel 処理時のベストプラクティス
アップロードされたスプレッドシート、静的なレポート、ストリームベースのファイルのいずれを読み取る場合でも、ここで提供された例は、Java アプリケーションに堅牢な Excel 処理機能を構築するのに役立ちます。
すべての制限を解除し、高度な Excel 機能を試したい場合は、無料の一時ライセンスを申請することも可能です。
6. FAQs
Q1: Java で Excel ファイルを動的に読み込むには?
A: Java で Excelファイルを動的に読み取るには、特に行数や列数が不明な場合、getLastRow() メソッドと getLastColumn() メソッドを使用して、実行時にデータ範囲を決定します。これにより、ハードコードされた制限なしに、プログラムをさまざまなスプレッドシートサイズに適応させることができます。
Q2: Java で Excel データを抽出するには?
A: Java で Excelファイルからデータを抽出するには、ワークブックをロードし、ネストされたループを使用してセルを反復処理します。getCellRange(row, column).getValue() で値を取得できます。Spire.XLS のようなライブラリはこのプロセスを簡素化し、.xls と .xlsx の両方の形式をサポートします。
Q3: Java で CSV ファイルを読み込むには?
A: CSV ファイルは、Javaの BufferedReader やファイルストリームを使って読み込めます。または、Spire.XLS は CSV 解析を直接サポートしており、Workbook.loadFromFile("data.csv", ",") のように区切り文字を指定して CSV ファイルをロードできます。
Q4: InputStream を使用して Java で Excel を読み込むには?
A: サーバーサイドアプリケーションでは、InputStream から Excel ファイルを読み込むケースがよくあります。Spire.XLS では、workbook.loadFromStream(inputStream) を呼び出し、ファイルベースの Excel ワークブックと同様に処理するだけです。






