java - 在评估引用另一个工作簿的公式时收到“未链接的书”
问题描述
我有两本工作簿:
- 地图.xlsx
- 请求.xlsx
map.xlsx 有一张Mapping, req.xlsx 有一张ABC Request。
我想在 map.xlsx 中插入和评估一个引用 req.xlsx 的公式。根据POI 文档,我使用以下代码。
FormulaEvaluator mapWbEvaluator = mapWb.getCreationHelper().createFormulaEvaluator();
FormulaEvaluator reqWbEvaluator = reqWb.getCreationHelper().createFormulaEvaluator();
Map<String, FormulaEvaluator> evalMap = new HashMap<>();
evalMap.put("map.xlsx", mapWbEvaluator);
evalMap.put("req.xlsx", reqWbEvaluator);
mapWbEvaluator.setupReferencedWorkbooks(evalMap);
Sheet mapSheet = mapWb.getSheet("Mapping");
CellReference tgtRef = new CellReference("A25");
Cell tgtCell = mapSheet.getRow(tgtRef.getRow()).getCell(tgtRef.getCol());
tgtCell.setCellFormula("IF('[req.xlsx]ABC Request'!R28,1,2)");
CellValue cellVal = mapWbEvaluator.evaluate(tgtCell);
执行最后一行时,我收到以下异常:
线程“主”java.lang.RuntimeException 中的异常:在 org.apache.poi.xssf.usermodel.BaseXSSFEvaluationWorkbook.resolveBookIndex(BaseXSSFEvaluationWorkbook.java:135) 处没有为文件名 req.xlsx 链接的书
知道出了什么问题吗?我想念什么吗?
解决方案
FormulaEvaluator.setupReferencedWorkbooks
只告诉评估者链接的工作簿在哪里。它没有链接它们。它们必须已经在主工作簿(主要评估者mapWbEvaluator
来自的工作簿)中链接。
也tgtCell.setCellFormula("IF('[req.xlsx]ABC Request'!R28,1,2)");
不会链接工作簿。它只将该公式设置到单元格中。但是req.xlsx
必须在map.xlsx
使用外部链接表中进行链接。例如,在该外部链接表中,链接获取一个索引,1
然后内部存储的公式将是IF('[1]ABC Request'!R28,1,2)
. 那里1
指向链接到req.xlsx
then 的外部链接表。
Apache poi
不提供创建或更改外部链接表。有ExternalLinksTable但只有在创建apache poi
XSSFWorkbook
. 没有什么可以为工作簿创建新的外部链接表。并且ExternalLinksTable
不提供添加新外部链接的方法。
在为什么我不能在 Apache POI 中将一个工作簿链接到另一个工作簿?我已经展示了一个使用低级方法创建外部链接表以将两个*.xlsx
工作簿链接在一起的示例。在这种情况下,从链接的工作簿中获取图表数据。但是从链接的工作簿中获取单元格数据的问题是相同的。
因此,要么您会为该代码而烦恼并了解在两个工作簿之间创建外部链接需要做什么,或者您将等到apache poi
在它的高级类中提供该功能。
推荐阅读
- asp.net - 登录过程中 User.Identity.GetUserId() 的 ASP.NET MVC5 身份问题
- java - 传递几个 lambda 作为方法的参数
- java - 如何在 jpa 存储库中使用 jsonb_set 来传递动态字符串?
- java - Setter - 检查值
- openmaptiles - 从大陆范围的 MapTiles 中提取特定国家
- ios - 如何在 Objective C IOS 中从最近的应用程序中删除应用程序
- floating-point - 正确舍入的双精度除法
- scala - spark - 数据帧在 scala 源代码中定义
- php - 如何迭代 Twig 循环中的许多属性?
- css - 首选降低透明度媒体查询参数的动机是什么