POI 允许您以流式方式读取 excel 文件。API 几乎是 SAX 的包装器。确保使用接受字符串的构造函数以正确的方式打开 OPC 包。否则你可能会立即耗尽内存。
OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);
现在,阅读器将允许您获取InputStreams
不同的部分。如果您想自己进行 XML 解析(使用 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 提供)。