日々の仕事や勉強の中で、Excelファイルからデータを読み込む必要があることがよくあります。少量のデータの場合は、手動でのコピーと貼り付けが機能する可能性がありますが、大量のデータの場合、このアプローチは非常に非効率的になります。この場合、Java プログラムを使用して Excel ファイル内のデータを自動的に読み取る方が良いでしょう。
このチュートリアルでは、Java プログラムを使用して Excel ファイル内のデータを読み取る方法を紹介します。これには次の側面が含まれます。
- Excel ファイル形式を理解する
- Java の Excel ファイル読み取りライブラリを選択する
- Excelファイルからデータを読み取る
- Excel ファイルでさまざまなデータ型を処理する
- Javaプログラムを使用してExcelファイルをエクスポート
はじめましょう!
1. Excel ファイル形式を理解する
Excel ファイルを読み取る Java プログラムを作成する前に、Excel ファイル形式を理解する必要があります。Excel ファイルは、ファイルを一連の「コンテナ」と「オブジェクト」に編成する Microsoft の OLE2 形式に基づいています。Excel ファイルのメイン コンテナは、1 つ以上のシートを含むワークブックです。各シートには、セルの 2 次元配列を形成する行と列のセットが含まれています。各セルには、テキスト、数値、日付、ブール値などのさまざまなデータ型を含めることができます。
2. JavaのExcelファイル読み込みライブラリを選択
Java には、Excel ファイルの読み取りに使用できるライブラリがいくつかあります。これらのライブラリには、Apache POI、JExcelApi、EasyXLS、JXL などが含まれます。このチュートリアルでは、Apache POI ライブラリを使用します。
Apache POI は、Word、Excel、PowerPoint などの Microsoft ドキュメント形式を操作するための Java API です。これは、Microsoft ドキュメントの作成、読み取り、および変更に使用できる Java クラスのセットを提供します。
3. Excelファイルのデータを読み取る
このセクションでは、Apache POI ライブラリを使用して Excel ファイルからデータを読み取る方法を示します。
始める前に、Apache POI ライブラリをプロジェクトの依存関係に追加する必要があります。これらは、Maven や Gradle などのビルド ツールを通じてプロジェクトに追加できます。
以下は、Maven プロジェクトの pom.xml ファイルに Apache POI ライブラリを追加するサンプル コードです。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
以下は、Gradle プロジェクトの build.gradle ファイルに Apache POI ライブラリを追加するサンプル コードです。
dependencies {
implementation 'org.apache.poi:poi:4.1.2'
}
次に、Apache POI ライブラリを使用して Excel ファイルからデータを読み取る方法を示します。
まず、Excel ファイル全体を表す Workbook オブジェクトを作成する必要があります。Apache POI には、3 つの異なるタイプの Workbook オブジェクトがあります。HSSFWorkbook は .xls ファイルを表し、XSSFWorkbook は .xlsx ファイルを表し、SXSSFWorkbook は大きな .xlsx ファイルを表します。WorkbookFactory.create() メソッドを使用して、ファイルの種類に基づいて Workbook オブジェクトを作成できます。以下は、XSSFWorkbook オブジェクトを作成するサンプル コードです。
FileInputStream file = new FileInputStream(new File("path/to/excel/file.xlsx"));
Workbook workbook = WorkbookFactory.create(file);
次に、Excel ファイル内のワークシートを表す Sheet オブジェクトを取得できます。Apache POI では、Sheet オブジェクトは Workbook オブジェクトの getSheet() メソッドによって返されます。「Sheet1」という名前の Sheet オブジェクトを取得するサンプル コードを次に示します。
Sheet sheet = workbook.getSheet("Sheet1");
Sheet オブジェクトを取得したら、各行と列を反復処理して、その中のセル データを読み取ることができます。以下は、Sheet オブジェクト内のすべてのセルを走査し、セル値を出力するサンプル コードです。
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
default:
System.out.print("\t");
}
}
System.out.println();
}
上記のコードでは、ネストされたイテレータを使用して各行と各列を走査します。各セルでは、switch ステートメントを使用して、さまざまなデータ型に基づいてさまざまな操作を実行します。
4. Excel ファイル内のさまざまなデータ型を処理する
Excel ファイルでは、セルに文字列、数値、日付、ブール値などのさまざまなデータ型を含めることができます。セル内のデータを読み取るとき、データを正しく処理するには、セル内のデータの種類を知る必要があります。
Apache POI では、Cell.getCellType() メソッドを使用してセルのデータ型を取得できます。このメソッドは CellType 列挙型の値を返します。switch ステートメントを使用すると、さまざまな列挙値に応じてさまざまな操作を実行できます。
以下は、switch ステートメントを使用してさまざまなデータ型を処理するサンプル コードです。
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.print(cell.getDateCellValue() + "\t");
} else {
System.out.print(cell.getNumericCellValue() + "\t");
}
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
default:
System.out.print("\t");
}
上記のサンプルコードでは、まずセルのデータ型が文字列かどうかを確認します。文字列の場合は、getStringCellValue() メソッドを使用して文字列値を取得します。セルのデータ型が数値の場合は、セルに日付が含まれているかどうかも確認する必要があります。日付の場合は getDateCellValue() メソッドを使用して日付値を取得し、それ以外の場合は getNumericCellValue() メソッドを使用して数値を取得します。
5. Javaプログラムを使用してExcelファイルをエクスポートします
Excel ファイル内のデータを読み取るだけでなく、Java プログラムを使用して Excel ファイルを作成およびエクスポートすることもできます。Apache POI は、Excel ファイルを作成および操作するための 2 つのクラス、HSSFWorkbook と XSSFWorkbook を提供します。
HSSFWorkbook クラスは従来の .xls 形式の Excel ファイルを操作するために使用され、XSSFWorkbook クラスは新しい .xlsx 形式の Excel ファイルを操作するために使用されます。ニーズに応じて、適切なクラスを選択して Excel ファイルを作成およびエクスポートできます。
Excel ファイルを作成してエクスポートする一般的な手順は次のとおりです。
- Excel ファイル全体を表す Workbook オブジェクトを作成します。
- Excel ファイル内のワークシートを表す Sheet オブジェクトを作成します。
- Excel ファイル内の行と列を表す Row オブジェクトと Cell オブジェクトを作成します。
- 各セルのデータとスタイルを設定します。
- Workbook オブジェクトをファイルまたは出力ストリームに書き込みます。
次に、Java プログラムを使用して Excel ファイルを作成およびエクスポートする方法を示すサンプル コードを見てみましょう。
- XSSFWorkbook オブジェクトを作成する
以下は、XSSFWorkbook オブジェクトを作成するサンプル コードです。
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
- 行とセルを作成する
行とセルを作成するサンプルコードは次のとおりです。
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, World!");
- セルのスタイルを設定する
Excel ファイルでは、フォント、色、配置など、セルにさまざまなスタイルを設定できます。セルのスタイルを設定するサンプル コードは次のとおりです。
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell.setCellStyle(style);
上記のサンプル コードでは、最初に createCellStyle() メソッドを使用してセル スタイル オブジェクトを作成します。次に、createFont() メソッドを使用してフォント オブジェクトを作成し、そのプロパティを設定します。最後に、スタイルをセルに適用します。
- Excelファイルのエクスポート
Excel ファイルをエクスポートする場合、Workbook オブジェクトをファイルまたは出力ストリームに書き込むことができます。Workbook オブジェクトをファイルに書き込むサンプル コードを次に示します。
FileOutputStream fileOut = new FileOutputStream("path/to/excel/file.xlsx");
workbook.write(fileOut);
fileOut.close();
上記のサンプル コードでは、まず FileOutputStream クラスを使用してファイル出力ストリーム オブジェクトを作成します。次に、write() メソッドを使用して Workbook オブジェクトをファイルに書き込みます。最後に、ファイル出力ストリームを閉じます。
ファイルに書き込むだけでなく、Workbook オブジェクトをネットワーク ストリームに出力して、ブラウザーに Excel ファイルをダウンロードすることもできます。Workbook オブジェクトをネットワーク ストリームに出力するサンプル コードを次に示します。
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"excel_file.xlsx\"");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.close();
上記のサンプル コードでは、まず HTTP 応答のコンテンツ タイプとファイル名を設定します。次に、getOutputStream() メソッドを使用してネットワーク出力ストリーム オブジェクトを取得します。最後に、write() メソッドを使用して Workbook オブジェクトをネットワーク ストリームに書き込み、出力ストリームを閉じます。
完全なサンプルコード
Java プログラムを使用して Excel ファイルを読み取り、エクスポートする方法を示す完全なサンプル コードを次に示します。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtils {
public static void readExcel(String fileName) throws IOException {
// 创建文件输入流
FileInputStream fileInputStream = new FileInputStream(new File(fileName));
// 创建工作簿对象
Workbook workbook = WorkbookFactory.create(fileInputStream);
// 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
// 遍历工作表中的所有行和单元格
for (Row row : sheet) {
for (Cell cell : row) {
// 根据单元格的类型读取数据
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
case FORMULA:
System.out.print(cell.getCellFormula() + "\t");
break;
case BLANK:
System.out.print("\t");
break;
default:
System.out.print("\t");
}
}
System.out.println();
}
// 关闭文件输入流
fileInputStream.close();
}
public static void writeExcel(String fileName) throws IOException {
// 创建工作簿对象
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// 创建行和单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, World!");
// 设置单元格样式
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell.setCellStyle(style);
// 导出 Excel 文件
FileOutputStream fileOut = new FileOutputStream(fileName);
workbook.write(fileOut);
fileOut.close();
}
}
このクラスを使用すると、次のように Excel ファイルを簡単に読み取り、エクスポートできます。
public static void main(String[] args) throws IOException {
String fileName = "path/to/excel/file.xlsx";
// 读取 Excel 文件
ExcelUtils.readExcel(fileName);
// 导出 Excel 文件
ExcelUtils.writeExcel(fileName);
}
6 結論
この記事では、Java プログラムを使用して Excel ファイルを柔軟に読み取り、エクスポートする方法を紹介します。まず、Office ドキュメントを操作するための強力な Java ツールである Apache POI ライブラリを紹介しました。次に、POI ライブラリを使用して Excel ファイルを読み取る方法を示し、セルごとにスタイルを設定する方法を説明しました。最後に、ExcelUtils クラスを使用して Excel ファイルを読み取り、エクスポートする方法を示す完全なサンプル コードを提供します。
Java プログラムから Excel ファイルを読み取ったりエクスポートしたりすることは、特に大量のデータを処理する必要があるプロジェクトで非常に役立つスキルです。Apache POI ライブラリを使用すると、Excel ファイルの読み書きが簡単にできるため、作業効率が大幅に向上します。
実際のアプリケーションでは、最良の結果を得るために、特定のニーズに応じて Excel ファイルの読み取りおよび書き込み方法を選択する必要があります。
参考文献
- Apache POI 公式ドキュメント ( https://poi.apache.org/ )