POI使用SAX处理大量数据的xlsx格式的Excel文件
来源:互联网 发布:淘宝店铺首页海报代码 编辑:程序博客网 时间:2024/06/08 16:48
POI在处理Excel方面确实比较方便,但是当Excel数据量比较大的时候,使用POI处理就会导致java.lang.OutOfMemoryError: Java heap space的错误,当有大量数据写入xlsx文件时,POI为我们提供了SXSSFWorkBook类来处理,这个类的处理机制是当内存中的数据条数达到一个极限数量的时候就flush这部分数据,再依次处理余下的数据,这个在大多数场景能够满足需求。当对一个存有大量数据的文件的xlsx文件进行读操作时,使用WorkBook处理就不行了,因为POI对文件是先将文件中的cell读入内存,生成一个树的结构(针对Excel中的每个sheet,使用TreeMap存储sheet中的行)。如果数据量比较大,则同样会产生java.lang.OutOfMemoryError: Java heap space错误。这个错误明显就是内存不足,虽然可以通过调整JVM堆区域内存大小来解决,但是一定的内存只能解决一定的数据量,当文件的大小并不确定的时候使用调整堆内存大小的方法并不能很优雅的解决这个问题,POI官方推荐使用“XSSF and SAX(event API)”方式来解决,即使用SAX对xlsx中的sheet.xml文件进行解析,然后根据MS的OOXML格式规范在sheet.xml,style.xml和sharedString.xml中解析数据。如果我们直接使用SAX对这些xml进行解析,则必须使用SAX中的三个方法startElement,characters和endElement解析到sheet.xml中的数据,再在style.xml中解析出格式,或者到sharedString.xml中解析数据,所以必须熟悉MS的OOXML规范,幸运的是
POI官方为我们提供了eventusermodel来解决这个问题。在POI-OOXML这个jar包中有org.apache.poi.xssf.eventusermodel这个包,XSSFSheetXMLHandler这个类可以返回的数据已经全部转换成String类型,只需要实现POI定义的SheetContentsHandler接口就可以很方便的获取到xlsx文件中的数据了。
- POI使用SAX处理大量数据的xlsx格式的Excel文件
- POI使用SAX处理大量数据的xlsx格式的Excel文件
- POI使用SAX处理大量数据的xlsx格式的Excel文件
- 利用POI框架的SAX方式处理大数据2007版Excel(xlsx)
- 利用POI框架的SAX方式处理大数据2007版Excel(xlsx)
- java使用poi读取xls格式和xlsx格式的excel文件
- POI读取并解析xlsx格式的excel文件
- java使用poi读取xlsx格式的Excel总结
- POI技术处理Excel表 .xls ..xlsx两种格式的导入操作
- 使用poi导出大量数据到excel遇到的问题
- POI读取加密的EXCEL(兼容XLS,XLSX格式)
- POI-处理大Excel文件(xlsx)
- Java使用POI解析后缀为.xls和.xlsx的Excel的完美处理
- 利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据
- Java 实现导出excel表 POI/Java实现不同excel格式(*.xls、*.xlsx)文件的读取
- POI处理excel文件中的日期格式数据bug的解决思路及方法
- java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
- POI 导出Excel 时间格式和小数点数据的处理
- 笔记本怎么设置WIfi热点
- angularjs $q服务的API详解
- SVN cleanup失败解决办法
- 这次的程式调试中遇到了fatal error LNK1104: 无法打开***.exe的错误
- 别犯这些错,否则越跳越糟心!
- POI使用SAX处理大量数据的xlsx格式的Excel文件
- php文件上传
- MTK功能机按键的上拉电阻导致了extended key模式不正常?
- Win7 64位安装Numpy
- 主席树模版
- java实现的一个发送手机短信
- knn最近邻
- 生产者和消费者
- jilu