首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java poi 导出Excel并追加数据,该如何解决

2013-01-27 
java poi 导出Excel并追加数据我的思路是这样子的,假如10000条数据,我要导到Excel表格中,而每次我只导1000

java poi 导出Excel并追加数据
  我的思路是这样子的,假如10000条数据,我要导到Excel表格中,而每次我只导1000条,需要导10次
每导一次我都把写入流关了,得到新的流导第二次。第三次。。。。。直到导完,我只看到第一次导的数据,其它几次的数据都看不到,这是为什么?
代码如下


         //工作薄的代码已创建,以下是核心代码
         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),只让写入一次。需要分析源码

[解决办法]

引用:
以我实际的经验,POI导入EXCEL,3万条左右一次性没出现过问题。

这个不能看条数的,看你导出的数据要求,100列和20列,支持的条数大不相同的。。。

热点排行