【Java】Excelのデータを取り込む方法(Apache POIを使用)

Java

スポンサーリンク

Javaを使用してExcelのデータを取り込む方法です。

Apache POIをインポート

Mavenプロジェクトの場合は、pom.xmlに以下を追記
※poi-ooxmlは2007年以降のExcelを読み込むために必要

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.3.0</version>
</dependency>

Gradleプロジェクトの場合は、build.gradleに以下を追記

// https://mvnrepository.com/artifact/org.apache.poi/poi
implementation group: 'org.apache.poi', name: 'poi', version: '5.3.0'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.3.0'

実装

1.以下のパスにエクセルを作成

C:\tmp\取り込み.xlsx

中身は適当に以下

2.以下のようにコードを記載

package jp.example;

import java.io.File;
import java.io.IOException;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.ss.usermodel.Cell;
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;

public class ImportExcel {

	public static void main(String[] args) {
		Workbook workbook = null;
		try {
			// 指定したパスのExcelファイル読み込み
			workbook = WorkbookFactory.create(new File("C:\\tmp\\取り込み.xlsx"));
			// 取得するシートを指定
			// 左から数えて何番目のシートか(0始まり)
			Sheet sheet = workbook.getSheetAt(0);
			// 直接シート名を指定する場合
			//Sheet sheet = workbook.getSheet("Sheet1");

			// 最終行を取得
			int lastRowNum = sheet.getLastRowNum();

			// 何行目から取り込みを開始するかを指定(0がエクセルの1行目)
			// 今回は1行目はヘッダーなので取り込まない
			int startRowNum = 1;

			// 開始行から最終行まで処理
			for (int currentRow = startRowNum; currentRow <= lastRowNum; currentRow++) {
				// 行を取得
				Row row = sheet.getRow(currentRow);
				if (row == null) {
					continue;
				}

				// 1列を取得(0がエクセルの1列目)
				Cell cell1 = row.getCell(0);
				// 列の値を取得(Excelが数値型の列であれば、getNumericCellValueで取得)
				// double型で取得されるので、小数点以下が不要な場合はintに変換して切り捨て
				// エクセルの型と取得する関数が違うとExceptionが発生するので注意
				int cell1Value = (int) cell1.getNumericCellValue();

				// 2列を取得(0がエクセルの1列目)
				Cell cell2 = row.getCell(1);
				// 列の値を取得(Excelが数値型の列であれば、getNumericCellValueで取得
				String cell2Value = cell2.getStringCellValue();

				// コンソールに出力
				System.out.println(currentRow + 1 + "行目→1列目:" + cell1Value + "、2列目:" + cell2Value);
			}
		} catch (EncryptedDocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (workbook != null) {
					// Excelを閉じる
					workbook.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

実行

以下のようにエクセルの内容がコンソールに出力

2行目→1列目:100、2列目:お菓子
3行目→1列目:300、2列目:リンゴ

Java

Posted by ton