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

时间:2016-05-02 19:33:54

标签: 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
}

1 个答案:

答案 0 :(得分:3)

由于XLSX文件格式存储外部引用的方式(实际上不是=[Other.xlsx]Sheet1!A1但实际上是=[23]Sheet1!A1),这是一个两步过程。首先,get the external workbook number from the Pxg。接下来,从该工作簿编号的Workbook get ExternalLinks table开始,注意一个接一个。 (外部工作簿0实际上是当前工作簿,因此外部工作簿1对应于外部链接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();
}
相关问题