在ApachePOI中,我试图读取单元格(原始)值为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
.委员会成员之一
总体安排
是一个DecimalFormat(我可以从调试器中看到),但似乎我没有API访问它。
我认为这是相关的:当我检查单元格的XML值时,我看到:
<xml-fragment r="D1" s="2">
<main:v>0.57499999999999996</main:v>
</xml-fragment>
这当然不同于我在Excel中看到的“原始”值(0.575)。
如果POI框架四舍五入为0.5749999999996而不是0.575,那么这当然可以解释为什么它是向下四舍五入而不是向上四舍五入。
复制Excel行为的唯一方法是将原始值四舍五入到3dp(0.575),然后四舍五入
再一次
至2dp(0.58)