码迷,mamicode.com
首页 > 其他好文 > 详细

POI处理excel2007内存溢出问题

时间:2015-05-13 17:17:58      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

        项目中遇到数据导入、导出用excle操作的问题,数据量在W级别,因03版有6W+的限制,系统统一采用07版excel来做,采用POI进行处理,在导入、导出的时候都遇到的内存溢出的问题,导入方面主要参考下面的文章处理

http://blog.csdn.net/lishengbo/article/details/40711769(感谢作者分享)

导出部分采用官方提供的例子,采用SXSSFWorkbook进行导出。可参考以下文章:

http://blog.csdn.net/wangweiyan89/article/details/8863975

        单独做这两部分功能都能解决内存溢出的问题,那么问题来了,系统中存在一种操作,需要将导出的文件再次进行导入,这里就是用SXSSFWorkbook导出的文件在采用SAX解析的方式进行读取,这时出现读不到数据的情况,前一步生成的excel可以正常打开查看,但无法通过程序再次读取,考虑过网络下载文件存在保护视图的等权限的问题,但读的权限是可以的,换思路。。。奇怪的是excel文件打开后,随便点击哪里,不进行修改,再关闭的时候就提示需要保存修改,保存修改后在次用程序读取就可以正常读取数据了。考虑是不是写文件的时候出现差错,用官方提供的最简单例子进行读取,发现同样问题。。。。

        看到excel文件改变后缀为zip之后,可以看到文件中xml格式内容,比较保存修改前后文件,发现其差距很大,从目录结构到xml文件结构都有很大差距。这条路也没有走通。。。

        最后还是在解析上查看问题,在采用sax方式解析excel时,断点跟解析过程,发现保存修改前后文件在解析过程中的区别,其实和之前xml格式差别的思路相同,两者在具体到单元格内容部分存在组织结构上的差异,在本文开始提到的导入excel部分对代码进行细微调整即可解决。文件差异如下:左右分别为可读xml和不可读xml文件结构

技术分享                                 技术分享

不可读xml实际的数据内容在上级目录的sharedStrings.xml文件中。简单看这些还没有思路解决问题,断点调试的过程中针对读取过程中该部分进行了修改XLSXCovertCSVReader类中startElement和endElement方法中原有的"v".equals(name)判断,增加 || "t".equals(name)支持,测试通过,正常读取两个文件中数据,从结果看是解决了遇到的问题,但具体原因还是不太明白,先记下,如果哪位大神能指点一二,不胜感激。

POI处理excel2007内存溢出问题

标签:

原文地址:http://my.oschina.net/u/185978/blog/414372

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!