CSV读取数据到Excel表格中(至少支持10万条数据)

天使小宝 2013-05-17 12:16:00
因为统计数据的需要,Oracle定时产生数据到CSV文件,需要将CSV文件中的数据转到Excel表格中,有5个不同的CSV文件中的数据需要转到Excel表格中,在转换的过程中,有时CSV文件中的报表数据达到10万条以上,这时在去转的时候,JVN就报内存溢出了,以下是基本的描述:

有5个不同的CSV文件,CSV文件中的单元格的内容信息完全是一样的,只是文件的大小有差异,导入到Excel表格中,5个不同的CSV文件通过工作表的形式存放在一个Excel工作簿中,解析CSV文件中的数据是通过文件的输入输出流来读写的,我测试了下,直接读取10晚条数据大概需要20秒左右的时间,但是将数据导入到Excel表格中时,用的是jxl的技术进行导入的,但是数据量大的话,就会报内存溢出,POI技术还没试过,估计也会报相同的错误吧,关键是不能分开导入多个Excel表格中,只能导入一个Excel表格中,如果有知道的大神,可以给个思路或者需要用到哪些技术,先谢谢大家啦~~~

...全文
977 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dowhilesmncn 2014-02-25
  • 打赏
  • 举报
回复
引用 10 楼 myjlvzlp 的回复:
[quote=引用 4 楼 dowhilesmncn 的回复:] 大哥你现在做出来了没有,我也要用,写出来的话可不可以发给我参考。谢谢
这个poi3.8版本的可以处理了,我已经写出来了,周末的时候会给出代码给你参考下吧~[/quote] 谢谢哈。12june@sina.com
dowhilesmncn 2014-02-25
  • 打赏
  • 举报
回复
谢谢哈。12june@sina.com
天使小宝 2014-02-21
  • 打赏
  • 举报
回复
引用 4 楼 dowhilesmncn 的回复:
大哥你现在做出来了没有,我也要用,写出来的话可不可以发给我参考。谢谢
这个poi3.8版本的可以处理了,我已经写出来了,周末的时候会给出代码给你参考下吧~
  • 打赏
  • 举报
回复
安心逍遥 2014-02-20
  • 打赏
  • 举报
回复
POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果也不是太好。3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。
jiekou0704 2014-02-20
  • 打赏
  • 举报
回复
10w的数据肯定会内存溢出的。。。 ps:将10 的数据分批次追加形式写入同一个excel试试。。
loveunittesting 2014-02-20
  • 打赏
  • 举报
回复
poi高版本好像有处理大数据量的方式,但是我没用过。这种问题使用office的xml格式来到处很容易。就像写入文本文件一样简单。而且写入速度很快
dowhilesmncn 2014-02-20
  • 打赏
  • 举报
回复
大哥你现在做出来了没有,我也要用,写出来的话可不可以发给我参考。谢谢
nanjg 2014-02-20
  • 打赏
  • 举报
回复
好 贴都沉了
失落夏天 2013-05-17
  • 打赏
  • 举报
回复
我是做电商的,和你一样需要处理大数据量的数据。 首先你只是说报表达到10W行,但是你没有提到列宽是多少。如果列宽超过20,那么就不用白费心思改到一张表里面了。 读CSV文件是不需要多大的内存的,但是生成excel的时候冗余很大的。 POI的方式直接生成xlsx的文件是不可以的,但是可以写入到xlsx文件。 POI的方式直接生成xls的文件可以,但是生成的文件相当的大。 我生成一份1.5W行,30列宽的文件xls的空间达到了60M。 至于解决办法,我暂时有两种, 一种就是尽量使用java的垃圾回收机制,把不需要的那种内存空间给回收掉。 另外尽量少定义新的对象。 第二,扩大java本身的运行内存,这个在run->Debug configuration->VM argument里面改-Xmx800m 一般800M基本都没有问题了,还有问题的话就真是程序本身问题了。
天使小宝 2013-05-17
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
我是做电商的,和你一样需要处理大数据量的数据。 首先你只是说报表达到10W行,但是你没有提到列宽是多少。如果列宽超过20,那么就不用白费心思改到一张表里面了。 读CSV文件是不需要多大的内存的,但是生成excel的时候冗余很大的。 POI的方式直接生成xlsx的文件是不可以的,但是可以写入到xlsx文件。 POI的方式直接生成xls的文件可以,但是生成的文件相当的大。 我生成一份1.5W行,30列宽的文件xls的空间达到了60M。 至于解决办法,我暂时有两种, 一种就是尽量使用java的垃圾回收机制,把不需要的那种内存空间给回收掉。 另外尽量少定义新的对象。 第二,扩大java本身的运行内存,这个在run->Debug configuration->VM argument里面改-Xmx800m 一般800M基本都没有问题了,还有问题的话就真是程序本身问题了。
非常感谢你那么晚给我回贴啊,按照你的方法,我去试试~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧