POI是否提供了一个事件驱动的API来读取XLS和XLSX文件?

希望标题说明了一切。 据我所知,较新的“SS”模型支持XLS和XLSX格式的文件,但似乎没有事件驱动的实现,据我所见:-(

我只想读取文件,而不是写入文件,而只需要单元格内容和数据types。

是的,不!

Apache POI确实提供了以stream,低内存,事件驱动的方式读取两种Excel文件格式的方法

但是…因为这两种文件格式存储的方式有很大的不同(一个是zip文件中的XML位,另一个是二进制logging),所以不可能以相同的事件方式读取这两种格式码。

因此,您的select是购买更多的内存+使用UserModel方法,通过提供通用接口来隐藏差异,或者编写两批事件代码来处理两种不同的格式

对于XLS文件/ HSSF,您应该遵循HSSF Event API上的Apache POI文档 。

对于XLSX文件/ XSSF,您应该遵循XSSF SAX Event API上的Apache POI文档

这两个使用的例子都可以在Apache POI源代码和例子中find。

是的,在Apache POI事件驱动的阅读是可用的:

请参阅此链接: 如何阅读活动

如上所述: org.apache.poi.poifs.eventfilesystem.POIFSReaderListener是一个用于注册文档的接口。 当org.apache.poi.poifs.eventfilesystem.POIFSReader读取匹配的文档时, POIFSReaderListener实例将接收一个org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent实例,该实例包含一个打开的DocumentInputStream以及有关该文档的信息。

为了你开始:

 public static void main(final String[] args) throws IOException { final String filename = args[0]; POIFSReader r = new POIFSReader(); r.registerListener(new MyPOIFSReaderListener()); r.read(new FileInputStream(filename)); } static class MyPOIFSReaderListener implements POIFSReaderListener { public void processPOIFSReaderEvent(final POIFSReaderEvent event) { final POIFSDocumentPath path = event.getPath(); final String name = event.getName(); final DocumentInputStream stream = event.getStream(); } }