请问使用POI如何处理大数据量内存溢出的问题。

JamesLee2003 2011-03-07 11:52:22
客户要求把所有的数据写入一个Sheet中(大概10~20万),他们需要使用VBA在另外的Sheet里面做处理,所以要求写入到一个Sheet里面,他们处理起来方便。

使用最新的POI(支持Excel2007以上,可以一个Sheet写入100多万条记录)。

现在的问题是如何处理大数据量,内存溢出的问题。

网上的说法是可以分多个workbook写出,然后合并。但我合并的时候发现数据耗费比直接生成更大。不知道哪位有好的算法,请不吝赐教。

如果不采取多个文件合并的做法,有好的实现方法也可以。

jxl最新版也不支持2007以上,每个sheet支持最大65536条记录,已经被客户否定。
...全文
954 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
scbb 2012-08-16
  • 打赏
  • 举报
回复
用jacob,调用Excel的宏做。 (这样就不能夸平台了,并且服务器测要装Excel)

先写个Excel的宏,试试看能处理那么大数据不?
能得话,java那里输出个中间文件,然后让Excel的宏去往Excel写数据。
tangwei070 2012-08-16
  • 打赏
  • 举报
回复
顶顶。目前我遇到这样的客户需求是直接否定的。 看看是否有牛人有好的解决方案。
邱旭 2012-08-16
  • 打赏
  • 举报
回复
我也来了,悲剧
AbsurdLife 2012-02-01
  • 打赏
  • 举报
回复
又多了个沦落人。
wds549961398 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ylz2007 的回复:]
引用 4 楼 jimmyteal 的回复:

我现在和你的问题一样 已经搞了一个月了 没什么好方向
给你一下我的研究方向 希望对你有启发
因为我的客户要求 excel2007 而且对单元格有格式处理 还要添加图片 还要大数据量(单sheet100w)。。。 很无敌的要求
下述方法不适合我的 可能会有帮助你的:
第一种格式,CSV,最简单的,格式最差,最基本的行列,不能合并,不能设置着色……
[/Quote]
同是天涯沦落人!我也搞了快一个月了,都没搞好!
  • 打赏
  • 举报
回复
[Quote=引用楼主 jameslee2003 的回复:]
客户要求把所有的数据写入一个Sheet中(大概10~20万),他们需要使用VBA在另外的Sheet里面做处理,所以要求写入到一个Sheet里面,他们处理起来方便。

使用最新的POI(支持Excel2007以上,可以一个Sheet写入100多万条记录)。

现在的问题是如何处理大数据量,内存溢出的问题。

网上的说法是可以分多个workbook写出,然后合并。但我合并的时候发现数据耗费……
[/Quote]

1.。 调大JVM内存
2.。 还不行的话,跟客户沟通,分类导出成多个excel文件处理。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jimmyteal 的回复:]

我现在和你的问题一样 已经搞了一个月了 没什么好方向
给你一下我的研究方向 希望对你有启发
因为我的客户要求 excel2007 而且对单元格有格式处理 还要添加图片 还要大数据量(单sheet100w)。。。 很无敌的要求
下述方法不适合我的 可能会有帮助你的:
第一种格式,CSV,最简单的,格式最差,最基本的行列,不能合并,不能设置着色,
第二种,HTML格式的,如:"<TA……
[/Quote]

呵呵,客户的PC能打开这类文件不、
jimmyteal 2011-04-02
  • 打赏
  • 举报
回复
我现在和你的问题一样 已经搞了一个月了 没什么好方向
给你一下我的研究方向 希望对你有启发
因为我的客户要求 excel2007 而且对单元格有格式处理 还要添加图片 还要大数据量(单sheet100w)。。。 很无敌的要求
下述方法不适合我的 可能会有帮助你的:
第一种格式,CSV,最简单的,格式最差,最基本的行列,不能合并,不能设置着色,
第二种,HTML格式的,如:"<TABLE>....</TABLE>"这样的文本,后辍名改为XLS就可以了,可以设置跨行列的合并,可以着色,图片没试过,估计是可以的,还可以设置单元格对齐,单元格的格式等,
第二种只能excel2003 不能2007 所有转化成2003 又有了数量限制
第三种,如果你没有格式上的要求 可以用java本身二进制流的方式 我试验过 速度极快 ,
可惜不知道如何设置颜色和图片 被迫放弃

现在我们的最新方案是用 ole操作excel 微软本身的东西自己调用自己了 呵呵 不过这样会造成平台相关性 ,也就是不能在windows外的平台使用
如果你有了解决方案希望不吝赐教给我 发布上来
希望我的这点建议能对你有帮助
jimmyteal 2011-04-02
  • 打赏
  • 举报
回复
回复楼上的 客户已经内存6G jvm调大到5G 依然内存溢出。。。。
无奈呀 数据量还是太大。。 能分多个excel我就不这么伤心了 搞这么多方案出来都不行。。
zqfddqr 2011-03-08
  • 打赏
  • 举报
回复
已经被客户否定。 刚刚没注意到这个 你是要求实时的啊?
zqfddqr 2011-03-08
  • 打赏
  • 举报
回复
1加大java的内存
2 1不行的话就分批处理
3 2 不行的话就得换开源软件了啊 jacob直接用微软的东西处理
4 3 不行 就得吧数据导出到数据库excel有这个功能 处理完了在输出到excel........


你要还是不好时也可以等楼下高见呵呵
JamesLee2003 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zqfddqr 的回复:]
已经被客户否定。 刚刚没注意到这个 你是要求实时的啊?
[/Quote]
呵呵,是JXL10万条记录要写入多个Sheet,这种做法客户不同意,要求只写入一个Sheet.

50,533

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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