java 读取excel2007 内存不足_POI处理excel2007内存溢出问题

项目中遇到数据导入、导出用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文件结构

b8c8e2424d91ea4e179890ee1477fc2c.png                                 

9460b5b764150e3e67d605cdc4cae073.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值