LoginSignup
3
2

More than 3 years have passed since last update.

JavaでExcelデータの取り込み

Posted at

はじめに

今回は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に取り込む処理を作ってみました。

SamplePOI.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ファイルを読み込ませて実行してみると、
「あかさたなはまやらわ」が出力される。
image.png

samplePOI.result
[あかさたなはまやらわ]

まとめ

簡単な処理しか行っていないが感覚的にはVBAと同じだなと感じました。
セルの中身を取得する際にはセルタイプを考慮しないといけないという所は少し理解に苦戦を強いられた。

Excelで関数を入れて取り込もうとすると、計算結果じゃなくて関数そのものが値として取得されるっぽい?
ので結果が欲しい場合は少し大変そう。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2