JavaでExcelファイルのデータを読み取る方法

日々の業務やアプリケーション開発において、Excelファイルからデータを読み取る場面はよくあります。Javaを使えば、Excelの内容を効率的かつ柔軟に取得し、データ処理やレポート生成などに活用できます。

本記事では、**Spire.XLS for Java** を使用して、Excelファイルを読み取る方法を3つのシナリオに分けて解説します。ファイルまたはストリームからの読み込み、セルの内容の取得、データ型や数式の扱いまで、実用的なコードとともに紹介します。

使用ライブラリ：[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-xls-for-java.html)

Maven:
```xml
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls.free</artifactId>
    <version>5.3.0</version>
</dependency>
```

---

## 方法1：Excelファイルを読み取り、すべてのセルを出力する

最も基本的な方法として、Excelファイルを読み込み、ワークシート内のすべてのセルを順に取得して表示します。

### サンプルコード

```java
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();
        }
    }
}
```

**ポイント：**

* `getCellRange(i, j).getValue()` はセルの生の文字列を返します。
* 行・列はどちらも **1から開始**（Excelの仕様と同じ）。

読み取り結果：
![Javaを使用してExcelファイルのデータを読み込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e4d3bd16-8757-4bf1-9f24-412640f0cbc9.png)

---

## 方法2：InputStreamを使ってExcelファイルを読み込む

ファイルが外部ストレージやWeb経由で提供される場合、`InputStream` を使って直接読み込むことができます。

### サンプルコード

```java
import com.spire.xls.*;
import java.io.*;

public class ReadExcelFromStream {
    public static void main(String[] args) throws FileNotFoundException {
        // ファイルのInputStreamを作成
        InputStream stream = new FileInputStream("data.xlsx");

        // Workbookに読み込む
        Workbook workbook = new Workbook();
        workbook.loadFromStream(stream);

        System.out.println("Excelファイルの読み込みに成功しました。");
    }
}
```

**ポイント：**

* 一時ファイルを保存せずに、直接ストリームから読み込めます。
* `.xlsx`、`.xls` の両形式に対応。

---

## 方法3：セルのデータ型や数式を取得する

Excelのセルには、文字列だけでなく、数値・日付・ブール値・数式など様々な形式があります。以下のコードは、セルの情報を多角的に取得する方法を示しています。

### サンプルコード

```java
import com.spire.xls.*;
import java.util.Date;

public class ReadCellTypes {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx");

        Worksheet sheet = workbook.getWorksheets().get(0);
        CellRange cell = sheet.getRange().get(2, 1); // B2セルを取得

        String text = cell.getText(); // 表示される文字列
        String value = cell.getValue(); // 元の値（文字列）
        Object value2 = cell.getValue2(); // オブジェクト型（型に応じて自動判定）

        String formula = cell.getFormula(); // 数式（ある場合）
        String result = cell.getEnvalutedValue(); // 数式の計算結果

        double number = cell.getNumberValue(); // 数値
        Date date = cell.getDateTimeValue(); // 日付
        boolean bool = cell.getBooleanValue(); // ブール値

        System.out.println("表示文字列: " + text);
        System.out.println("元の値: " + value);
        System.out.println("数式: " + formula);
        System.out.println("計算結果: " + result);
        System.out.println("数値: " + number);
        System.out.println("日付: " + date);
        System.out.println("ブール値: " + bool);
    }
}
```

**ポイント：**

* `getFormula()` で数式文字列を取得。
* `getEnvalutedValue()` で数式の結果を取得。
* セルの内容に応じて適切な型で取り出すことが可能。

---

## まとめ

本記事では、JavaとSpire.XLSを使ってExcelファイルを読み取る方法を3つの視点から紹介しました：

* ファイルからの逐次読み取り
* InputStreamによる読み込み
* セルのデータ型や数式の処理

これらの方法を組み合わせれば、より高度なExcelデータ処理にも対応できます。

---

## 関連リンク

* [JavaでExcelの空白行や列を削除する方法](https://jp.e-iceblue.com/tutorials/java/spire-xls-java/xls-java-worksheet/java-delete-blank-rows-and-columns-in-excel.html)
* [Spire.XLS公式チュートリアル（日本語）](https://jp.e-iceblue.com/tutorials/java/spire-xls-java/xls-java-program-guide-content.html)