2013-08-26 45 views
0

我需要阅读XLSM文件元数据,以文件小于4 MB以下说明正常工作:阅读XLSM文件大小的元数据6MB -Apache POI 3.9-

try { 
OPCPackage pkg = OPCPackage.open (new FileInputStream ("C:\\Path to file.xlsm")); 
XSSFWorkbook XSSFWorkbook = new document (pkg); 
documento.getProperties poixmlProperties =(); 
... 
} catch (Exception ex) { 
... 
} finally { 
... 
} 

对于超过4 MB的文件不运行第二行(XSSFWorkbook document=new XSSFWorkbook (pkg)),直接跳到finally块而不给出任何错误。

+1

您是否尝试过使用,而不是'FileInputStream'一个'File'? – akokskis

回答

0

首先,当你有一个File对象时,不要使用InputStream!使用InputStream意味着POI必须将整个内容缓冲到内存中,而使用File时,它可以在需要时将其保留在磁盘上。作为covered in the POI documentation,而不是打开与:

OPCPackage pkg = OPCPackage.open(new File("file.xlsx")); 

其次,你似乎是打开了整个Excel的结构和解析该到内存中,当所有你想要的是元数据。别!激发XSSFWorkbook需要相当多的处理和内存,如果您关心的是元数据,则不需要这些处理和内存。元数据位于文件的单独区域中。

只需加载属性本身,然后使用那。你的最终代码会是这样的:

OPCPackage pkg = OPCPackage.open(new File("file.xlsx")); 
POIXMLProperties props = new POIXMLProperties(pkg); 
System.out.println("The title is " + props.getCorePart().getTitle()); 

这应该加载仅在文件的总大小作为内存使用的一部分

+0

非常感谢您的澄清。 现在我的问题是如何保存元数据修改成一个新的文件,并保持原来的文件不变。 – user2671914

+0

指令pkg.close()保存对原始文件所做的所有更改,并且我需要不修改此文件 – user2671914

+0

将原始文件复制到新名称,打开新名称,更改,保存? – Gagravarr

相关问题