在开发过程中,数据导出excel的功能很常见,数据少,到没问题,一旦超过65535条数据就会报错,因此可以考虑导出多个sheet来解决,代码如下:
private static void exportExcel() throws Exception { //总记录数 int totalNum = 200000; //每个sheet设置60000 int avgNum = 60000; //建立新的sheet对象(excel的表单) //计算需要生成多少个sheet int sheetCount = (int) Math.ceil(Double.valueOf(totalNum) / Double.valueOf(avgNum)); File tempFile = new File("E:\\result5.xls"); FileOutputStream outputStream = new FileOutputStream(tempFile); //创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wb = new HSSFWorkbook(); for (int i = 0; i < sheetCount; i++) { HSSFSheet tempSheet = wb.createSheet("号段数据" + (i + 1)); HSSFRow tempRow = tempSheet.createRow(0); //创建单元格并设置单元格内容 tempRow.createCell(0).setCellValue("名称"); tempRow.createCell(1).setCellValue("电话"); tempRow.createCell(2).setCellValue("是否有效"); tempRow.createCell(3).setCellValue("是否微信"); //在sheet里创建第三行 int startIndex = (i > 0 ? (i * avgNum) : 1); int endIndex = ((i + 1) * avgNum) > totalNum ? totalNum : ((i + 1) * avgNum); for (int j = startIndex; j <= totalNum; j++) { if (j < endIndex) { int rowIndex = (i > 0 ? (j - (i * avgNum)) + 1 : j); HSSFRow tempRow2 = tempSheet.createRow(rowIndex); tempRow2.createCell(0).setCellValue("test" + (j)); tempRow2.createCell(1).setCellValue("12312342312"); tempRow2.createCell(2).setCellValue("是"); tempRow2.createCell(3).setCellValue("是"); } } } wb.write(outputStream); outputStream.flush(); outputStream.close(); //以下是输出Excel文件 }