博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POI处理excel2007内存溢出问题
阅读量:5929 次
发布时间:2019-06-19

本文共 1089 字,大约阅读时间需要 3 分钟。

hot3.png

        项目中遇到数据导入、导出用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)支持,测试通过,正常读取两个文件中数据,从结果看是解决了遇到的问题,但具体原因还是不太明白,先记下,如果哪位大神能指点一二,不胜感激。

转载于:https://my.oschina.net/u/185978/blog/414372

你可能感兴趣的文章
Merge Two Sorted Lists
查看>>
Pop–实现任意iOS对象的任意属性的动态变化
查看>>
Fedora 31 已经为 Python 3.8 做好了准备
查看>>
BeetlSQL 2.11.2 发布,Java Dao 工具
查看>>
API 标准化成为技术团队面临的最大挑战
查看>>
苹果成为AWS大客户,亚马逊每月坐收3000万美元
查看>>
什么样的经历,才能领悟成为架构师?
查看>>
ovirt自承载引擎安装配置 安装过程中的FQDN问题
查看>>
NLP顶会NAACL-HLT论文奖名单发布,BERT获最佳长论文奖 ...
查看>>
Windows64位系统进入debug模式
查看>>
线程调度之多线程循环打印ABCABC
查看>>
通过写Babel插件理解抽象语法树(翻译)
查看>>
清华大学马少平:一款智能硬件背后的“AI争霸” ...
查看>>
JavaScript之EventListener事件的传递顺序--冒泡和捕获传播 ...
查看>>
linux 检查那个进程占用文件
查看>>
行业案例——政府部门协同OA解决方案分享
查看>>
【直播回顾】云栖社区特邀专家蒋泽银:Jpom一款低侵入式Java运维、监控软件 ...
查看>>
封装、继承、多态、访问符,范围修饰符
查看>>
.NET(WinCE、WM)开发转Android开发 ——Xamarin和Smobiler对比
查看>>
Prometheus 由于时间不同步导致数据不显示
查看>>