java poi 导出Excel并追加数据
我的思路是这样子的,假如10000条数据,我要导到Excel表格中,而每次我只导1000条,需要导10次
每导一次我都把写入流关了,得到新的流导第二次。第三次。。。。。直到导完,我只看到第一次导的数据,其它几次的数据都看不到,这是为什么?
代码如下
Java code
//工作薄的代码已创建,以下是核心代码
for(int i=1; i<=10; i++){
output = new FileOutputStream("d:/1.xls");
//如果是第一次,我创建sheet对像
if(i == 1){
sheet = workBook.createSheet();
//这段的作用是创建Excel的表头,详细代码就不贴出来了
this.printTableContext(sheet);
workBook.setSheetName(0,"sheet1");
}
//这是查询结果,每次1000条,假如
list = new Query().queryList(sql);
//写内容
this.printContext(1000*(i-1),sheet,list);
workBook.write(output);
output.flush();
output.close();
}
这段是核心代码,我只是第一次创建了我的sheet对像,这个对像一直存在,第二次的时候就直接用这个对像,可是第二次写的时候,数据显示不出来,求高手指导啊。
------解决方案-------------------- output = new FileOutputStream("d:/1.xls");
for(int i=1; i<=10; i++){
//如果是第一次,我创建sheet对像
if(i == 1){
sheet = workBook.createSheet();
//这段的作用是创建Excel的表头,详细代码就不贴出来了
this.printTableContext(sheet);
workBook.setSheetName(0,"sheet1");
}
//这是查询结果,每次1000条,假如
list = new Query().queryList(sql);
//写内容
this.printContext(1000*(i-1),sheet,list);
workBook.write(output);
output.flush();
}
output.close();
------解决方案--------------------或者
for(int i=1; i<=10; i++){
output = new FileOutputStream("d:/1.xls",true);
//如果是第一次,我创建sheet对像
if(i == 1){
sheet = workBook.createSheet();
//这段的作用是创建Excel的表头,详细代码就不贴出来了
this.printTableContext(sheet);
workBook.setSheetName(0,"sheet1");
}
//这是查询结果,每次1000条,假如
list = new Query().queryList(sql);
//写内容
this.printContext(1000*(i-1),sheet,list);
workBook.write(output);
output.flush();
output.close();
}
------解决方案--------------------百度后2种方法试试
1.是用最新版的poi ,这个问题已经解决了,利用缓存的cell,不创建更多的对象实例,导致heap 回收不了。SXSSFWorkbook关键是这个类的使用
Java代码
FileOutputStream out = new FileOutputStream(new File("D://result.xlsx"));
Workbook writeWB = new SXSSFWorkbook(500);
Sheet writeSheet = writeWB.createSheet();
for (int rr = 0; rr < 400000; rr++) {
Row writeRow = writeSheet.createRow(rr);
for (int cc = 0; cc < 10; cc++) {
writeRow.createCell(cc).setCellValue("测试" + rr + "," + cc);
}
}
writeWB.write(out);
2.http://cats-tiger.iteye.com/blog/240053
------解决方案--------------------一种可能是代码的问题
另外可能workBook.write(output),只让写入一次。需要分析源码
------解决方案--------------------