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

xiaoxiao2021-02-27  301

         考勤管理模块中的签到记录列表数据导出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; }

转载请注明原文地址: https://www.6miu.com/read-4733.html

最新回复(0)