导出Excel超过65535条限制解决方案
使用poi导出excel的时候如果数据过多,超过65535条会报错,因为excel2003一个sheet表最多导出65535条,excel2007是10万4000多条限制。
因此遇到这种excel导出数据量比较大的时候,可以考虑如果数量超过一定数量,比如50000或者60000,新建一个sheet重新插入数据。
实例代码:
//创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wb = new HSSFWorkbook(); //建立新的sheet对象(excel的表单) HSSFSheet sheet=wb.createSheet("号段数据1"); HSSFSheet sheet2=wb.createSheet("号段数据2"); //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 HSSFRow row1=sheet.createRow(0); //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 //HSSFCell cell=row1.createCell(0); //设置单元格内容 //cell.setCellValue("号段数据"); //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列 //sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); //在sheet里创建第二行 HSSFRow row2=sheet.createRow(0); //创建单元格并设置单元格内容 row2.createCell(0).setCellValue("城市"); row2.createCell(1).setCellValue("电话"); row2.createCell(2).setCellValue("是否有效"); row2.createCell(3).setCellValue("是否微信"); //在sheet里创建第二行 HSSFRow row4=sheet2.createRow(0); //创建单元格并设置单元格内容 row4.createCell(0).setCellValue("城市"); row4.createCell(1).setCellValue("电话"); row4.createCell(2).setCellValue("是否有效"); row4.createCell(3).setCellValue("是否微信"); //在sheet里创建第三行 for (int i = 1; i < 66535; i++) { if(i<60000){ HSSFRow row3=sheet.createRow(i); row3.createCell(0).setCellValue("淄博"); row3.createCell(1).setCellValue("15953325566"); row3.createCell(2).setCellValue("是"); row3.createCell(3).setCellValue("是"); }else{ HSSFRow row5=sheet2.createRow(i-59999); row5.createCell(0).setCellValue("淄博"); row5.createCell(1).setCellValue("15953325566"); row5.createCell(2).setCellValue("是"); row5.createCell(3).setCellValue("是"); } } //以下是输出Excel文件
下面是导出的Excel文件:
65535在计算机中代表着什么:
计算机是按照二进制储存数据的,一般用unsign int这种数据类型来储存正整数。每个unsign int型的数在计算机内存中占2个字节,每个字节有8位二进制数。也就是说,在计算机中,每个整数都是用16位2进制数来表示的。所以,最大的数就是16个1,也就是11111111 11111111。把二进制数11111111 11111111转化为十进制数就是65535。