POI处理excel2007内存溢出问题

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

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

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

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

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

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

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

                                 

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

相关文章
相关标签/搜索