1. 概述
在本快速教程中,我们将演示如何使用Apache POI设置Excel中的数字单元格的格式。
2. Apache POI
Apache POI是一个开源的纯Java项目,它提供了用于读写Microsoft Office格式文件(例如Word、PowerPoint和Excel)的库。
在使用较新的.xlsx文件格式时,我们将使用XSSFWorkbook类,而对于.xls格式,我们将使用HSSFWorkbook类。
3. 数字格式
Apache POI的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工作表中显示格式化的值(无论是否更改数字单元格的实际值)。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章
