请问,jxl在写excel文件时,如果文件比较大,需要用多个sheet来存储,那么一定要按步骤:新建一个sheet—>写入数据—>调用一下write方法,这样的步骤来么?可不可以先创建多个sheet,然后在往每一个sheet里面写呢?
我现在采用的方法就是后者,因为有14万多条数据,我以6万为一组存为一个sheet,我先建了3个sheet,然后开始存,当最前面的6万条存完的时候,程序显示此时的sheet已经是第二个sheet了,但是什么在存到第65534条记录的时候还是发生了溢出呢?要是我只往一个sheet里面存,那么我们都知道一个sheet最多只能存65535行,出现溢出很能理解,但是为什么我现在把前面6万条存入sheet1,接下去从第60001条开始存,存到第65534条还是发生了溢出呢?
我的部分代码如下:
public void saveToExcel(ResultSet rs, String targetFile, String siteName){
               String[] title = {.....};  //此处括号中内容较多,省略,不影响阅读

                WritableWorkbook workbook = null;
OutputStream os; try {
    os = new FileOutputStream(targetFile);
    orkbook = Workbook.createWorkbook(os);
    WritableSheet sheet = null;   
    
    final int MAXRAW = 60000;  //设置每个sheet做多只能存60000条记录
       
    int rowCount = 0;  //总的记录条数个数
    int sheet_num = 0;  
    while(rs.next()){
     rowCount++;  //统计数据总条数
    }
    for(int r = 0; r <= rowCount; r++){
     sheet_num =  r / MAXRAW;
     if(r % MAXRAW == 0){   //新建多个sheet
     workbook.createSheet(siteName + "_" + (sheet_num + 1), sheet_num);
     }
    }     int raw = 0;
    sheet_num = 0;
    rs.first();       //将ResultSet光标移至第一行
    while(rs.next()){
     if(raw % MAXRAW == 0){
       if(raw > 1) workbook.write();
       sheet = workbook.getSheet(sheet_num);   
       sheet_num++;
     }
    
                        //向excel中存入数据     
     for(int k = 0; k < rs.getMetaData().getColumnCount(); k++){
     sheet.addCell(new Label(k,raw + 1,rs.getString(k+1)));
     }
     raw++;     
    }
    workbook.write();
    workbook.close();          
    System.out.println("文件存取完毕!");
} catch (IOException | WriteException | SQLException e) {
// TODO 自动生成的 catch 块
System.out.println("错误:存取文件出错!");
e.printStackTrace();
}
   
}
jxl多个sheetjava写excel

解决方案 »

  1.   

    不管有多少个sheet,一个工作簿中的总记录数是不是不能超过65535条啊?
      

  2.   

    没有用过jxl用的poi,也没写过这么大的数据量,帮你顶一下
      

  3.   

    workbook.write();你这一直往workbook里面写,应该写到新建的sheet里面
      

  4.   

      rs.first();       //将ResultSet光标移至第一行
        while(rs.next()){
          if(raw % MAXRAW == 0){
            if(raw > 1) workbook.write();
            sheet = workbook.getSheet(sheet_num);    
           sheet_num++;
          }
    原因:if(raw > 1) workbook.write();
    解决:去掉if(raw > 1) workbook.write();这句代码
      

  5.   

    我觉得应该是一个excel工作簿最多只能写65535行,我每60000条记录写在一个excel文件里面,然后生成多个excel文件,就解决了我遇到的问题