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

时间:2015-09-01 17:09:09

标签: java excel apache-poi

希望标题能说清楚。据我所知,较新的'SS'模型同时支持XLS和XLSX格式文件,但据我所知,它似乎没有事件驱动的实现: - (

我只想读取文件,而不是写它们,我只需要单元格内容及其数据类型。

2 个答案:

答案 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();
    }
}