POIを使用した数値形式
1. 概要
このクイックチュートリアルでは、 ApachePOIを使用してExcelで数値セルをフォーマットする方法を示します。
2. Apache POI
Apache POI は、オープンソースの純粋なJavaプロジェクトです。 Word、PowerPoint、ExcelなどのMicrosoftOffice形式でファイルを読み書きするためのライブラリを提供します。
新しい.xlsxファイル形式では、 XSSFWorkbook クラスを使用し、 .xls 形式では、
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からで入手できます。