希望标题能说清楚。据我所知,较新的'SS'模型同时支持XLS和XLSX格式文件,但据我所知,它似乎没有事件驱动的实现: - (
我只想读取文件,而不是写它们,我只需要单元格内容及其数据类型。
答案 0 :(得分:3)
是的,不!
Apache POI提供了以流媒体,低内存,事件驱动方式读取两种Excel文件格式的方法
但是......因为两种文件格式以非常不同的方式存储(一种是zip文件中保存的XML位,另一种是二进制记录),所以无法以事件方式读取这两种格式使用相同的代码。
因此,您的选择是购买更多内存+使用UserModel方法,通过提供通用接口来隐藏差异,或者编写两个事件代码来处理两种不同的格式
对于XLS文件/ HSSF,您应该遵循Apache POI docs on the HSSF Event API。
对于XLSX文件/ XSSF,您应该遵循Apache POI docs on the XSSF SAX Event API
可以在Apache POI源和示例中找到使用它们的各种示例。
答案 1 :(得分:0)
是的,在Apache POI事件驱动的阅读中可用:
请参阅此链接:how-to-event-reading
如上所述:
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();
}
}