はじめに
今回はApachePOIです。
Javaの処理の中にExcelで作られたデータ群を取り込む為に使いました。
ApachePOIとは
正式名称ApachePOI
WordやExcelといったMicrosoft Office形式のファイルを読み書きできるJavaライブラリ
※Wiki参照
https://ja.wikipedia.org/wiki/Apache_POI
ここから以下のjarファイルをダウンロードしました。
https://poi.apache.org/download.html
poi-4.1.1.jar
poi-ooxml-4.1.1.jar
poi-ooxml-schemas-4.1.1.jar
commons-collections4-4.4.jar
commons-compress-1.19.jar
xmlbeans-3.1.0.jar
作った処理
対象のExcelファイルの1シート目、A列をJavaに取り込む処理を作ってみました。
public class SamplePOI {
/*
* 本処理
*/
public static void main(String[] args) {
//ここに取り込みたいExcelファイルのフルパスを入れる
String ExcelPath = "";
//Excel用オブジェクト
Workbook wb;
Sheet sh;
Row row;
Cell cell;
//取得データを保持するリスト
List<String> columnA_List = new ArrayList<>();
try (InputStream is = new FileInputStream(ExcelPath)) {
//対象のExcelファイルをJavaに取り込み
wb = WorkbookFactory.create(is);
//対象ファイルの1枚目のシートを指定
sh = wb.getSheetAt(0);
//シート内の最大行を取得
int rowMaxA = sh.getLastRowNum();
//最大行分のループを回してA列のセルをString型として取得
for (int i = 0; i <= rowMaxA; i++) {
row = sh.getRow(i);
cell = row.getCell(0);
String cellValue = getCellStringValue(cell);
columnA_List.add(cellValue);
}
//コンソールに出力
System.out.print("[");
for (String outStr : columnA_List) {
System.out.print(outStr);
}
System.out.print("]");
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* セルの状態を判別してString型で返す。
*/
private static String getCellStringValue(Cell cell) {
String retStr;
CellType cellType = cell.getCellType();
switch (cellType) {
case STRING:
retStr = cell.getStringCellValue();
break;
case NUMERIC:
retStr = String.valueOf(cell.getNumericCellValue());
break;
case BOOLEAN:
retStr = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA:
retStr = String.valueOf(cell.getCellFormula());
break;
case ERROR:
retStr = String.valueOf(cell.getErrorCellValue());
break;
default:
retStr = "";
break;
}
return retStr;
}
}
実行してみる
次のひらがなを入れたExcelファイルを読み込ませて実行してみると、
「あかさたなはまやらわ」が出力される。
[あかさたなはまやらわ]
まとめ
簡単な処理しか行っていないが感覚的にはVBAと同じだなと感じました。
セルの中身を取得する際にはセルタイプを考慮しないといけないという所は少し理解に苦戦を強いられた。
Excelで関数を入れて取り込もうとすると、計算結果じゃなくて関数そのものが値として取得されるっぽい?
ので結果が欲しい場合は少し大変そう。