永发信息网

求Java poi 大数据量导出(五万行数据) 例子

答案:2  悬赏:20  手机版
解决时间 2021-03-23 16:20
求Java poi 大数据量导出(五万行数据) 例子
最佳答案
我给你个办法,是要导出excel吗?别使用poi,使用xml来描述excel即可,就像流文件一样,多少都不会流出,给你个思路,你自己扩展,希望你能看明白。


import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
try {
DataOutputStream rafs = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(new File(
"d://test.xml"))));
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append(" sb.append("\n");
sb.append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
sb.append("\n");
sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");
sb.append("\n");
sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");
sb.append("\n");
sb.append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">");
sb.append("\n");
sb.append(" \n");
sb.append(" \n");
sb.append("
\n");
int sheetcount = 0;
int recordcount = 20;
int currentRecord = 0;
int total = 100;
int col = 20;
sb.append("");
sb.append("\n");
sb.append(" + "\" ss:ExpandedRowCount=\"" + total
+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");
sb.append("\n");
for (int i = 0; i < total; i++) {
if ((currentRecord == recordcount
|| currentRecord > recordcount || currentRecord == 0)
&& i != 0) {// 一个sheet写满
currentRecord = 0;
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("
");
sb.append("");
sb.append("\n");
sb.append("False");
sb.append("\n");
sb.append("False");
sb.append("\n");
sb.append("
");
sb.append("\n");
sb.append("
");
sb.append(" + "\">");
sb.append("\n");
sb.append(" + "\" ss:ExpandedRowCount=\"" + recordcount
+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");
sb.append("\n");
}
sb.append("");
for (int j = 0; j < col; j++) {
System.out.println(i);
sb.append("10000000000000000123");
sb.append("\n");
}
sb.append("
");
if (i % 5000 == 0) {
rafs.write(sb.toString().getBytes());
rafs.flush();
sb.setLength(0);
}
sb.append("\n");
currentRecord++;
}
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("
");
sb.append("");
sb.append("\n");
sb.append("False");
sb.append("\n");
sb.append("False");
sb.append("\n");
sb.append("
");
sb.append("\n");
sb.append("
");
sb.append("
");
sb.append("\n");
rafs.write(sb.toString().getBytes());
rafs.flush();
rafs.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

可以直接执行,只是给你个思路。追问很感谢你的思路,只是XML是没有格式的,可读性和excel也无法相比,所以没办法用xml追答xml可以描述Excel的任何格式,你只是没有去观察,至于使用poi或者jxl都不行,这个路我已经走过了。希望你不要走弯路,因为他们在写入的机制一样,都是一个单元格一个对象,你想如果5w数据10列的话都多少个单元格对象在内存中?这样你的内存不溢出才怪。

我刚才给你写的demo 你把生成的文件格式直接修改为 xls试试看看什么效果
全部回答
五万行数据没问题,10万我都导过,你可以用逗号分隔,别用什么poi,再命名为excel就可以了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
男孩的名字 钇 与哪个字搭配合适
新世纪波斯工具地址有知道的么?有点事想过去
一件商品按原价出售可获30%的利润,现打九折
国人重英语轻汉语的思考
清明节快到了,想给客户、朋友发一些祝祝福语
木下佑香最近在b站少了很多弹幕
滕州阳光大姐月嫂公司五星级月嫂多少钱一月
新都·鑫城在什么地方啊,我要过去处理事情
春节祝平安幸福的诗句,“我亦无诗送归掉,但
单选题下列现象不属于平移的是A.小华乘电梯从
这个女生叫什么名字,经常看见她的图片,是网
求解初中数学
看的近义词(要求填双音词)
一千瓦时交流电等于多少直流电
闽香春茗茶怎么去啊,有知道地址的么
推荐资讯
波司登是哪国品牌?
学字的偏旁部首是什么
什么电影好看
四川共拓岩土科技的渠道衬砌是什么样的?
索赔申请书怎么写,索赔申请书
请把客厅鞋柜的门关不上了等等中文翻译成日语
魔术师把手伸进一锅沸腾的“油”,1分钟,2分
天龙八部3生活玩家偶然打打副本 经常做点装备
真食尚餐厅(纺大阳光店)这个地址在什么地方,
用亲人,朋友,家人三个词写一段话100字
15302063905电子邮箱号是多少
晚上睡不着诗句
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?