日期:2014-05-19  浏览次数:20817 次

java如何将大批量数据导成excel
工程需要导出百万条数据到excel,但是大概在6W条数据的时候就崩掉了,请各位大神帮忙下,提个可行性方法,
最好能有代码例子。

------解决方案--------------------
你什么格式的?cvs?
------解决方案--------------------
从数据库里导吗?不行分批导吧。
------解决方案--------------------
分割数据,分批导入
------解决方案--------------------
探讨
引用:
你什么格式的?cvs?

xsl

------解决方案--------------------
我们以前导出大批量数据到excel中的时候,分页查询用流输出,循环导入到excel中,知道没有数据。
不过导入到excel要注意一个问题,excel的一个sheet最多能放65536行数据,在导出的时候要注意分sheet
------解决方案--------------------
1.xls 一个sheet有行数限制 最多是 65536, 所以如果你一定要用xls的话 那当行数超过这个限制的时候你需要分sheet
2.xlsx 也是有限制的 好像是150万左右
3.如果你的数据不会超150万建议导出到csv 然后用可以用excel 2007+打开
------解决方案--------------------
先查询出满足条件的总数据条数
在每次查询出6w分别写入sheet
------解决方案--------------------
这么大的数据 如果没有其他的业务转化(java介入),就直接使用数据库能提供的方式来解决
如果需要用java来介入的,可以使用JDBC批量处理
------解决方案--------------------
跟什么连接超时了? 你实再要导成XLS格式的,只能分批执行。 数据太大内在溢出的话,可以导成多个文件。就不存在write完不好操作的问题。要是实再要导成一个文件多个sheet中的话。那每6w数据写一次。完了。再打开它,操作它的下一个sheet。
------解决方案--------------------
操作excel能否定位到具体的某一行?

是否可以定位第1到第10w

然后定位第10w零1到20w行

以此类推

分成多段 分批导入 

例如 第一个方法(){
 读1到10w
 然后插入数据库

第二个方法()(){
 读10w零1到20w
 然后插入数据库


------解决方案--------------------
你的运行环境什么样的?没用足够的内存想处理这么庞大的数据也是白扯啊
------解决方案--------------------
探讨

引用:
1.xls 一个sheet有行数限制 最多是 65536, 所以如果你一定要用xls的话 那当行数超过这个限制的时候你需要分sheet
2.xlsx 也是有限制的 好像是150万左右
3.如果你的数据不会超150万建议导出到csv 然后用可以用excel 2007+打开


更正:xlsx的行数上限是 1048576

------解决方案--------------------
03版的也就是以xls结尾的最多是65536行数据,07版xlsx是1048576。
这也就是为什么你导出到6w多的时候会报错了。
所以你需要分开导出。
怎么分开,有两类方法。
1.按照类别来,比如月份、日期、部门等分类,但是也会出现一个月份超出65536的情况。
2.就按照行数来,超出65536的就用下一个sheet来导出。这个在函数中很好实现的,一个for搞定。
所以,楼主,就不需要纠结了。