我遇到了下一个问题: 每当我尝试评估SXSSFWorkbook内的SXSSFCell的公式时,如果将CellType设置为“ String”,它都会正确地计算出它的值,然后结束,从而擦除先前存储在其中的公式。
我尝试了经典方式:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateAll();
特定单元格:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateFormulaCell(cell);
甚至是这样:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue cv = evaluator.evaluate(cell);
cell.setCellValue(new XSSFRichTextString(cv.getStringValue()));
但是每次,我的单元格对象的CellType都设置为String。
另一方面,在XSSFCell
中使用XSSFWorkbook
时我没有问题。运行上面的示例之一完美运行。计算公式后,CellType
仍为“公式”
而且,当我阅读源代码时,SXSSFFormulaEvaluator
和XSSFFormulaEvaluator
都扩展了BaseFormulaEvaluator
,该函数evaluateFormulaCell
表示“单元格仍然是公式单元格”(事实并非如此)对于任何SXSSFCell
)
经过一番挖掘,我发现setCellValue
类和SXSSFCell
类之间的方法XSSFCell
是不同的,这就是原因。
在我看来,这是一个从未解决的错误,但是如果有人对如何解决该问题有任何想法,那就太好了。