在Apache POI中读取公式单元格的结果3.15

问题描述:

我尝试从单元格中读取值作为字符串(就像在Excel中看到的那样)。我使用Apache POI 3.15从xlsx(XSSFWorkbook)中读取数据。在Apache POI中读取公式单元格的结果3.15

我的目标是如果单元格包含整数,则省略小数点和尾随零。这适用于CellType.NUMERIC

val dataFormatter = new DataFormatter(true) // set emulateCsv to true 
val stringValue = dataFormatter.formatCellValue(cell) 

如果我使用相同的代码为CellType.FORMULA细胞(例如,它引用另一个“整数”单元的单元),它只是给我的公式作为一个字符串,而不是它的计算值。

如何获取Excel显示中所显示的公式单元格的值?

您需要“评估”单元格以获得公式的结果。这不是由POI自动完成的,因为它可能是一项繁重的操作,往往不是必需的。

详见http://poi.apache.org/spreadsheet/eval.html,基本上你创建一个FormulaEvaluator和检索,小区A CellValue问题

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 
... 
CellValue cellValue = evaluator.evaluate(cell); 
+0

谢谢您的回答。如果我应用你的解决方案,我实际上得到的单元格值(在我的情况下“2.0”),但不是显示在Excel(“2”)。为了得到所需的输出,我需要将其更改为:'dataFormatter.formatCellValue(evaluateator.evaluateInCell(cell))' –

+0

是的,格式化不是由评估者完成的,因此在第二步中完成格式化与格式化其他格式与dataFormatter的单元格内容。 – centic