java - Apache Poi,如何获取链接的工作簿?

标签 java apache apache-poi

我尝试分析带有其他文件链接的 excel 文件,我想知道文件名和路径。为此,我使用的是 apache poi 3.14。

我为 Ref3DPtg 对象弄明白了,但对于 Ref3DPxg 我不知道该怎么做。我只能访问单元格地址和工作表名称。

有人知道怎么做吗?

代码:

...
if(ptg instanceof Ref3DPxg){
    cellAddress = ptg.format2DRefAsString(); 
    sheetName = ptg.getSheetName();
    workbookName = ???;
} else if(ptg instanceof Ref3DPtg) {
    // by Ref3DPtg is no problem
}

最佳答案

由于 XLSX 文件格式存储外部引用的方式,实际上不是 =[Other.xlsx]Sheet1!A1 而实际上是 =[23]Sheet1!A1,这是一个两步过程。一、get the external workbook number from the Pxg .接下来,来自Workbook get ExternalLinks table对于该工作簿编号,请注意差一。 (External Workbook 0 实际上是当前工作簿,所以External Workbook 1 对应External Link 0)。最后,获取 filename for that link

所以,你的代码应该是这样的:

if(ptg instanceof Ref3DPxg){
   Ref3DPxg pxg = (Ref3DPxg)ptg;
   int extWB = pxg.getExternalWorkbookNumber();
   int extLink = extWB-1;
   ExternalLinksTable links = wb.getExternalLinksTable().get(extLink);
   String filename = links.getLinkedFileName();
}

关于java - Apache Poi,如何获取链接的工作簿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990272/

相关文章:

java - 从字符串获取类类型

java - JSF 验证错误 h :selectOneMenu but for only one item

java - JTextField 忽略 nextLine()? [第二部分]

java - 如何使用 Apache POI 将 HSSFWorkbook 转换为 XSSFWorkbook?

java - 安卓媒体播放器错误-1004

node.js - 在 Apache 反向代理上运行 Socket.io

apache - 如何在docker中以标准方式停止solr

apache - 在具有 80 端口的 vps 的静态 IP 上运行 red5

java - 调整 XSLFChart 的大小

java - 如何使用 XSSF (Apache POI 3.8) 调整图表大小?