Java を 使用した Excel ファイルの読み取りは、特にレポート、財務データ、ユーザーレコード、サードパーティとの連携を扱う際に、エンタープライズアプリケーションでよく求められる要件です。データインポート機能の構築、スプレッドシート分析の実行、Web アプリケーションへの Excel 解析の統合など、いずれの場合でも、Java で Excel ファイルを効率的に読み取る方法を学ぶことは不可欠です。 本チュートリアルでは、Java を使用して .xls および .xlsx ファイルを読み込む方法を解説します。さらに、実践的な Java コード例を通じて、大容量ファイルの処理、InputStream からの読み込み、行単位でのデータ取得方法なども紹介します。 1. Java プロジェクトのセットアップ 2. Java で XLSX/XLS ファイルを読み込む方法 Excel ファイル(XLSX/XLS)の読み込み 行単位で Excel を読み込む InputStream から Excel を読み込む さまざまな形式でセル値を取得する 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 ワークブックと同様に処理するだけです。