HSSFWorkBook导出excel2003表数据超过65535条时报错怎么办

来源:互联网 发布:淘宝优惠起群名字大全 编辑:程序博客网 时间:2024/05/22 16:35

         考勤管理模块中的签到记录列表数据导出excel2003表时,如果数据量太大,超过了65535条就会报错.

解决办法:当数据每隔65535条时,就新建一个sheet工作表写数据,把数据写到多张sheet表里面.

/**     * excel 2003版本的导出方法 支持多个sheet导出 导出的文件后缀为.xls     * 由于excel2003最多导出65535条数据     * @param dataMap       要导出的数据     * @param excelFilePath excel文件的存放位置     * @param fileName      excel文件名字     * @return     */    public String exportXlsExcel(Map<String,List<String[]>> dataMap,String excelFilePath,String fileName){        FileOutputStream fout=null;        String fileLocal="";        try{            File file=new File(excelFilePath);            if(!file.exists()){                file.mkdirs();            }            // 第一步,创建一个webbook,对应一个Excel文件            HSSFWorkbook wb=new HSSFWorkbook();            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet            HSSFSheet sheet=null;            List<String[]> dataList=null;            HSSFCellStyle style=wb.createCellStyle();            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);            //            dataList=dataMap.get("签到记录列表");            int i;            int k;            /**             * k表示sheet工作表的张数             */            int dataSizeNum=dataList.size()-1;    //减去表头            if (dataSizeNum%EXCEL_EXPORT_PARAM==0){                k=(dataList.size()-1)/EXCEL_EXPORT_PARAM;            }else {                k=(dataList.size()-1)/EXCEL_EXPORT_PARAM+1;            }            for (int t=0;t<k;t++){                int titleNum=t+1;                sheet=wb.createSheet("签到记录列表"+"("+titleNum+")");                for(i=0;i<=EXCEL_EXPORT_PARAM;i++){                    // 生成第一行 第一行是表头,包括表头在内,所以多加一行                    HSSFRow row=sheet.createRow(i);                    /**                     * 1EXCEL_EXPORT_PARAM表示每张sheet工作表最多写的记录的条数(不包括表头)                     */                    int num=(t*EXCEL_EXPORT_PARAM)+i;                    if (num>=dataList.size()){                        break;                    }                    String[] arr=dataList.get(num);                    /**                     * t不等于0且i=0时说明又是一张sheet表                     */                    if (t!=0&&i==0){                        arr=dataList.get(0);                    }                    for(int j=0;null!=arr&&j<arr.length;j++){                        // 给这一行的第一列赋值                        HSSFCell cell=row.createCell(j);                        String value = arr[j];                        if(value==null ||"null".equals(value)){                            value = "";                        }                        cell.setCellValue(value);                        cell.setCellStyle(style);                        if(i==0){                            HSSFCellStyle tempStyle=style;                            tempStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);                            tempStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);                            cell.setCellStyle(tempStyle);                        }                    }                }            }            // 第六步,将文件存到指定位置            fileLocal=excelFilePath+"/"+fileName+".xls";            fout=new FileOutputStream(fileLocal);            wb.write(fout);        }catch(Exception e){            e.printStackTrace();        }finally{            try{                if(fout != null) {                    fout.close();                }            }catch(IOException e){                // TODO Auto-generated catch block                e.printStackTrace();            }        }        return fileLocal;    }



0 0