使用Apache poi在Excel中进行公式计算

4
我将尝试从Excel 2007工作表中读取数据。读取Excel表格时的问题在于其单元格内的所有值都是公式类型。
这些单元格的值如下:

='C:\\**\[***.xlsx]*'!G23

当我尝试使用公式计算来阅读它们时,会出现以下错误:
Exception in thread "main" java.lang.RuntimeException: Could not resolve external workbook name '/**/**.xlsx'. Workbook environment has not been set up.
at org.apache.poi.ss.formula.OperationEvaluationContext.createExternSheetRefEvaluator(OperationEvaluationContext.java:109)
at org.apache.poi.ss.formula.OperationEvaluationContext.createExternSheetRefEvaluator(OperationEvaluationContext.java:84)
at org.apache.poi.ss.formula.OperationEvaluationContext.getRef3DEval(OperationEvaluationContext.java:309)
at org.apache.poi.ss.formula.WorkbookEvaluator.getEvalForPtg(WorkbookEvaluator.java:634)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateFormula(WorkbookEvaluator.java:505)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:263)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluate(WorkbookEvaluator.java:205)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateFormulaCellValue(XSSFFormulaEvaluator.java:267)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateFormulaCell(XSSFFormulaEvaluator.java:154)
at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateAllFormulaCells(HSSFFormulaEvaluator.java:346)
at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateAllFormulaCells(HSSFFormulaEvaluator.java:337)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateAllFormulaCells(XSSFFormulaEvaluator.java:241)
at com.kiodex.ExcelWorkbook2007.parse(ExcelWorkbook2007.java:26)
at ExcelTest.main(ExcelTest.java:24)
    Caused by: org.apache.poi.ss.formula.CollaboratingWorkbooksEnvironment$WorkbookNotFoundException: Could not resolve external workbook name '/**/**.xlsx'. Workbook environment has not been set up.
at org.apache.poi.ss.formula.CollaboratingWorkbooksEnvironment.getWorkbookEvaluator(CollaboratingWorkbooksEnvironment.java:194)
at org.apache.poi.ss.formula.WorkbookEvaluator.getOtherWorkbookEvaluator(WorkbookEvaluator.java:156)
at org.apache.poi.ss.formula.OperationEvaluationContext.createExternSheetRefEvaluator(OperationEvaluationContext.java:107)
... 13 more

该表格具有适当的值,但由于它们是公式类型,当我们尝试进行评估时,会出现引用在公式中的Excel错误。
我尝试了下面链接中提供的所有可能的方法Formula Evaluation Apache,但都无效。
请帮忙。

类似于这个 http://stackoverflow.com/questions/26881400/how-to-update-excel-sheet-links-using-poi - Viraj Nalawade
1
是的,但它没有一个合适的解决方案.. :( - Deepak Kumar
3
你尝试过按照Apache POI文档中详细说明的方式设置外部工作簿引用了吗?这个方法对你有多大帮助? - Gagravarr
实际上问题是,我们没有它所引用的Excel表格。 :( - Deepak Kumar
1
在您的Excel工作簿中,某些单元格可能已经引用了另一个Excel表格(工作簿名称为'//.xlsx'),请删除该引用,然后应用公式求值器。这样就可以正常工作了。 - nanthaa.ks
2个回答

2

今天我遇到了同样的错误。由于一些数据丢失问题,我从旧文件创建了一个新的Excel文件并更改了它的名称。当我在新的Excel文件中评估公式时,它给出了旧名称的错误。以下这行代码完美地解决了问题:

wb.setForceFormulaRecalculation(true)

希望这能对某些人有所帮助。


1
var bcd = sheet1.Workbook.GetCreationHelper().CreateFormulaEvaluator();
bcd.IgnoreMissingWorkbooks = true;
bcd.EvaluateAll();

4
仅仅添加代码可能可以解决问题,但是解释会帮助提问者和未来的读者更好地理解问题所在以及如何解决。 - Tobias Brösamle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接