使用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。