java导出excel单sheet超过65535数据报错拆分多sheet导出
在开发过程中,数据导出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文件
}
浙公网安备 33010602011771号