Dolen

导航

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文件
    }

 

posted on 2021-11-30 09:52  Dolen  阅读(1356)  评论(0编辑  收藏  举报