1. 概要

このクイックチュートリアルでは、 ApachePOIを使用してExcelで数値セルをフォーマットする方法を示します。

2. Apache POI

Apache POI は、オープンソースの純粋なJavaプロジェクトです。 Word、PowerPoint、ExcelなどのMicrosoftOffice形式でファイルを読み書きするためのライブラリを提供します。

新しい.xlsxファイル形式では、 XSSFWorkbook クラスを使用し、 .xls 形式では、 HSSFWorkbook[ X165X]クラス

3. 数値形式

ApachePOIのsetCellValueメソッドは、 double のみを入力として受け入れるか、 double に暗黙的にキャストできる入力として受け入れ、doubleを返します。数値として。 setCellStyleメソッドは、必要なスタイルを追加するために使用されます。 Excelの数値形式の#文字は、必要に応じてここに数字を配置することを意味しますが、文字0は、不要な0であっても、常にここに数字を配置することを意味します。

3.1. 表示値のみのフォーマット

0.00や#。##などのパターンを使用して、double値をフォーマットしてみましょう。 まず、セル値をフォーマットするための簡単なユーティリティメソッドを作成します。

public static void applyNumericFormat(Workbook outWorkbook, Row row, Cell cell, Double value, String styleFormat) {
    CellStyle style = outWorkbook.createCellStyle();
    DataFormat format = outWorkbook.createDataFormat();
    style.setDataFormat(format.getFormat(styleFormat));
    cell.setCellValue(value);
    cell.setCellStyle(style);
}

上記のアプローチを検証するための簡単なコードを検証しましょう。

File file = new File("number_test.xlsx");
try (Workbook outWorkbook = new XSSFWorkbook()) {
    Sheet sheet = outWorkbook.createSheet("Numeric Sheet");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    ExcelNumericFormat.applyNumericFormat(outWorkbook, row, cell, 10.251, "0.00");
    FileOutputStream fileOut = new FileOutputStream(file);
    outWorkbook.write(fileOut);
    fileOut.close();
}

これにより、スプレッドシートに数値セルが追加されます。

注:表示値はフォーマットされた値ですが、実際の値は同じままです。 同じセルにアクセスしようとしても、10.251を取得します。

実際の値を検証してみましょう。

try (Workbook inWorkbook = new XSSFWorkbook("number_test.xlsx")) {
    Sheet sheet = inWorkbook.cloneSheet(0);
    Row row = sheet.getRow(0);
    Assertions.assertEquals(10.251, row.getCell(0).getNumericCellValue());
}

3.2. 実際の値と表示値の両方のフォーマット

パターンを使用して表示と実際の値をフォーマットしてみましょう。

File file = new File("number_test.xlsx");
try (Workbook outWorkbook = new HSSFWorkbook()) {
    Sheet sheet = outWorkbook.createSheet("Numeric Sheet");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    DecimalFormat df = new DecimalFormat("#,###.##");
    ExcelNumericFormat.applyNumericFormat(outWorkbook, row, cell, Double.valueOf(df.format(10.251)), "#,###.##");
    FileOutputStream fileOut = new FileOutputStream(file);
    outWorkbook.write(fileOut);
    fileOut.close();
}

これにより、スプレッドシートに数値セルが追加され、フォーマットされた値が表示されます。また、、実際の値が変更されます。

上記の場合の実際の値を表明しましょう。

try (Workbook inWorkbook = new XSSFWorkbook("number_test.xlsx")) {
    Sheet sheet = inWorkbook.cloneSheet(0);
    Row row = sheet.getRow(0);
    Assertions.assertEquals(10.25, row.getCell(0).getNumericCellValue());
}

4. 結論

この記事では、Excelシートの数値セルの実際の値を変更するかどうかに関係なく、書式設定された値を表示する方法を示しました。

このチュートリアルで使用されているすべてのコードサンプルは、GitHubからで入手できます。