2013-08-26 51 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

相關問題