在 Apache POI 中,我正在尝试读取单元格(原始)值为:0.575 的 Excel 电子表格
据我所知,DataFormatter.formatCellValue()
方法的目的是按照 Excel 文档中显示的方式返回单元格的值。
Excel 中的单元格格式为自定义:"£"#,##0.00;[Red]-"£"#,##0.00
它在 Excel 中的显示方式是:£0.58
当我使用时:
DataFormatter formatter = new DataFormatter();
String displayValue = formatter.formatCellValue(cell);
我得到:0.57 英镑
为什么 POI 的格式化程序会在 Excel 对值进行四舍五入时对值进行四舍五入?
我试过了:
if( type == CellType.NUMERIC ) {
Format format = formatter.getDefaultFormat(cell);
if( format instanceof DecimalFormat ) {
DataFormatter.setExcelStyleRoundingMode((DecimalFormat)format);
}
}
但是没有设置舍入模式,因为 format
是 ExcelGeneralNumberFormat
。 format
的成员之一是 DecimalFormat(正如我从调试器中看到的那样),但我似乎没有 API 访问权限。
我相信这是相关的:当我检查单元格的 XML 值时,我看到:
<xml-fragment r="D1" s="2">
<main:v>0.57499999999999996</main:v>
</xml-fragment>
这当然与我在 Excel 中看到的“原始”值 (0.575) 不同。 如果 POI 框架是四舍五入 0.57499999999999996 而不是 0.575 那么这当然解释了为什么它是四舍五入而不是向上。 重现 Excel 行为的唯一方法是将原始值四舍五入到 3dp (0.575) - 然后 再次 到 2dp (0.58)