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(); } }
- 如何使用Apache POI输出到特定的列和工作表?
- Apache POI – 具有非英文字符的列,例如泰文和单元格为空,然后跳过单元格
- 使用NPOI的.xlsx文件有问题的损坏 – Excel无法打开文件“file.xlsx”,因为文件格式或文件扩展名无效
- Apache-POI忽略Excel工作表的行
- 尝试在JAVA中将数据写入多个工作表时,XLSX文件被损坏
- 将Java程序的输出通过Apachae POI存储在Excel表格中
- 如何在java xssf poi中移动列
- 如何使用Apache POI在1或2张excel文件中查找特定的string?
- POI HSSFCell类的getRichStringCellValue()和getStringCellValue()方法有什么区别?