如何在 POI XSSF 事件模型中获取单元格未格式化的值?

How to get the cell unformatted value in POI XSSF event model?

单元格 A1 具有 公式“=A2” 并且格式设置为显示 1 个小数点

单元格 A2 的 值为 4.23

单元格 A1 显示 4.2(格式化显示值)

单元格 A2 显示 4.23(格式化显示值)

我的 XSSF 事件模型 sheetContentHandler class 实现

public void cell(String cellReference, String formattedValue, XSSFComment comment)

但是单元格 A1 的 formattedValue returns 4.2,我想检索 unformattedValue 4.23

我该怎么做? (我无法更改为 usermodel,我的文件很大)

好的,无法使用 sheetContentHandler 执行此操作(尽管如果需要,您可以获得实际的公式,但这不是我要找的)

唯一的解决方案是使用扩展 DefaultHandler 的 SheetHandler class。

apache-poi 站点上的示例代码: Example

如果唯一的问题是数值格式化,您可以将自定义 DataFormatter 传递给 XSSFSheetXMLHandler 并继续使用 SheetContentsHandler 接口。

只需覆盖主要的 formatRawCellContents(...) 方法即可不格式化值和 return 原始值。 例如

@Override
public String formatRawCellContents(double value, int formatIndex, String formatString, boolean use1904Windowing) {
    return Double.toString(value);
}

这使得日期更容易,而且您不必为反转日期格式而烦恼,只需使用 DateUtil.getJavaDate() 作为值。