日々の業務やアプリケーション開発において、Excelファイルからデータを読み取る場面はよくあります。Javaを使えば、Excelの内容を効率的かつ柔軟に取得し、データ処理やレポート生成などに活用できます。
本記事では、Spire.XLS for Java を使用して、Excelファイルを読み取る方法を3つのシナリオに分けて解説します。ファイルまたはストリームからの読み込み、セルの内容の取得、データ型や数式の扱いまで、実用的なコードとともに紹介します。
使用ライブラリ:Free Spire.XLS for Java
Maven:
<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ファイルを読み込み、ワークシート内のすべてのセルを順に取得して表示します。
サンプルコード
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の仕様と同じ)。
方法2:InputStreamを使ってExcelファイルを読み込む
ファイルが外部ストレージやWeb経由で提供される場合、InputStream
を使って直接読み込むことができます。
サンプルコード
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のセルには、文字列だけでなく、数値・日付・ブール値・数式など様々な形式があります。以下のコードは、セルの情報を多角的に取得する方法を示しています。
サンプルコード
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データ処理にも対応できます。