POIを使用すると、Excelファイルをストリーミング方式で読み取ることができます。APIはSAXのラッパーです。文字列を受け取るコンストラクターを使用して、OPCパッケージを正しい方法で開いていることを確認してください。そうしないと、すぐにメモリが不足する可能性があります。
OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);
これで、リーダーを使用InputStreams
してさまざまな部分を取得できるようになります。(SAXまたはStAXを使用して)自分でXML解析を実行する場合は、これらを使用できます。ただし、フォーマットに精通している必要があります。
より簡単なオプションは、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も提供)を使用することをお勧めします。