【问题标题】:Formula evaluation in excel using Apache poi使用Apache poi在excel中进行公式评估
【发布时间】:2021-03-18 00:12:14
【问题描述】:

我正在尝试从 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 但它不起作用。

请帮忙。

【问题讨论】:

  • 看起来与*.com/questions/26881400/…类似
  • 是的..但它没有合适的解决方案.. :(
  • 您是否尝试设置外部工作簿引用as detailed in the Apache POI documentation?这让你走多远?
  • 实际上问题是,我们没有它所指的 excel 表。 :(
  • 在您的 Excel 工作簿中,某些单元格可能已被另一个 Excel 工作表(工作簿名称“/**/**.xlsx”)引用,删除该引用,然后应用公式评估器。然后它会工作。

标签: java apache-poi


【解决方案1】:

我今天也遇到了同样的错误。因为由于一些数据丢失问题,我从旧文件创建了新的 excel 文件并更改了它的名称。当我在新的 excel 文件中评估公式时,它的旧名称给出了这个错误。下面的行像一个魅力一样解决了问题:

wb.setForceFormulaRecalculation(true)

希望对某人有所帮助。

【讨论】:

    【解决方案2】:
    var bcd = sheet1.Workbook.GetCreationHelper().CreateFormulaEvaluator();
    bcd.IgnoreMissingWorkbooks = true;
    bcd.EvaluateAll();
    

    【讨论】:

    • 虽然只添加代码可能会解决问题,但解释将有助于 OP 和未来的读者更好地理解问题是什么以及如何解决它。
    最近更新 更多