我尝试分析带有其他文件链接的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
}
答案 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();
}