【发布时间】:2015-09-03 08:09:44
【问题描述】:
在我们的项目中,我们有不同版本的 excelsheets 相互引用:
C:\V1\Sample.xls //没有引用
C:\V2\Sample.xls //引用 V1
C:\V3\Sample.xls //引用 V2
单元格值示例:
=MID('C:\V1\[Sample.xls]Sheet1'!$AB2;21;1)
现在我想使用apache POI评估V3的公式,我找到了以下示例here
// Create a FormulaEvaluator to use
FormulaEvaluator mainWorkbookEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
// Track the workbook references
Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>();
// Add this workbook
workbooks.put("report.xlsx", mainWorkbookEvaluator);
// Add two others
workbooks.put("input.xls", WorkbookFactory.create("c:\temp\input22.xls").getCreationHelper().createFormulaEvaluator());
workbooks.put("lookups.xlsx", WorkbookFactory.create("/home/poi/data/tmp-lookups.xlsx").getCreationHelper().createFormulaEvaluator());
// Attach them
mainWorkbookEvaluator.setupReferencedWorkbooks(workbooks);
// Evaluate
mainWorkbookEvaluator.evaluateAll();
现在我的问题:我不知道文件的位置,因此我需要从 mainworkbook 获取所有引用,然后自动(并且可能递归地)添加它们,而不是像在上面的例子。是否有获取参考的功能,或者有人知道实现此目的的方法吗?
另外,我想知道是否必须将所有 FormulaEvaluator 添加到 V3,还是必须将 V2 添加到 V3 和 V1 到 V2 才能工作?
我目前已经实现了 setIgnoreMissingWorkbooks(true),但是由于值会改变,我们不想手动打开每个 excel 文件来更新我想要实现这个解决方案的引用。任何帮助表示赞赏
【问题讨论】:
标签: java excel apache-poi cross-reference