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

Excel 如何在POI XSSF事件模型中获取单元格未格式化值?,excel,apache-poi,xssf,Excel,Apache Poi,Xssf,单元格A1具有公式“=A2”,格式为显示1个小数点 单元格A2的值为4.23 单元格A1显示4.2(格式化显示值) 单元格A2显示4.23(格式化显示值) 我的XSSF eventmodel sheetContentHandler类实现 公共空单元格(字符串cellReference、字符串formattedValue、, XSSFComment注释) 但是formattedValue为单元格A1返回4.2,我想检索未格式化的值4.23 我该怎么做? (我无法更改为usermodel,我有大量文

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

单元格A2的值为4.23

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

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

我的XSSF eventmodel sheetContentHandler类实现

公共空单元格(字符串cellReference、字符串formattedValue、, XSSFComment注释)

但是formattedValue为单元格A1返回4.2,我想检索未格式化的值4.23

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

好的,使用sheetContentHandler无法做到这一点(尽管如果需要,您可以获得实际的公式,但这不是我想要的)

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

apache poi站点上的示例代码:

如果唯一的问题是数值格式,则可以将自定义数据格式设置程序传递给XSSFSheetXMLHandler,并继续使用SheetContentsHandler界面

只需重写主formatRawCellContents(…)方法,不格式化值并返回原始值。 e、 g


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

简短回答-编写自己的SAX处理程序来处理工作表XML。这不是很难做到,但肯定比仅仅使用
XSSFSheetXMLHandler
(内部处理格式化)要做更多的工作。我还喜欢使用BigDecimal的toPlainString()方法的格式化选项,如下所述:
@Override
public String formatRawCellContents(double value, int formatIndex, String formatString, boolean use1904Windowing) {
    return Double.toString(value);
}