POI可以讓你以流的方式讀取Excel文件。 API幾乎是SAX的一個包裝。確保使用帶String的構造函數以正確的方式打開OPC包。否則,您可能會立即耗盡內存。
OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);
現在,讀者可以讓你得到InputStreams
爲不同的部分。如果你想自己做解析(使用SAX或StAX),你可以使用這些。但它需要非常熟悉格式。
一種更容易的選擇是使用XSSFSheetXMLHandler。下面是讀取第一個表的例子:
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler);
parser.parse(new InputSource(reader.getSheetsData().next()));
凡mySheetsContentHandler應該是自己實現XSSFSheetXMLHandler.SheetContentsHandler。這個類將被饋入行和單元格。
不過請注意,這可能是適度消耗內存,如果您的共享字符串表是巨大的(如果你沒有在你的大張的任何重複的字符串,其發生)。如果內存仍然是問題,我建議使用原始XML流(也由XSSFReader提供)。
你從IDE如eclipse運行它?你是如何設置記憶選項的?我認爲您的設置可能沒有正確執行。 – 2012-07-05 13:32:18
是的,我使用eclipse IDE並提出了以下修改它... 1)在的eclipse.ini編輯的-Xmx256M到-Xmx-1024M 2)在IDE窗口 - > prefrences->已安裝JRE->加入 - Xms256M -Xmx1024M默認的VM參數。我認爲這可能反映在日食IDE – Avinash 2012-07-05 13:38:49