如何在 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() 作为值。
单元格 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() 作为值。