Invalid row number (65536) outside allowable range (0..65535)

把数据库里的数据导出成Excel文件时,报这个错误:Invalid row number (65536) outside allowable range (0..65535)

导出的文件类型是.xls,错误原因是因为.xls文件行数最长为65535,超过这个行数导出会出现错误。

在 Excel 早期版本中,默认的工作薄扩展名为".xls",:最大256(IV,2的8次方)列,最大65536(2的16次方)行;即横向256个单元格,竖向65536个单元格。

自 Office 2007 版本起,Excel 默认的工作薄扩展名为".xlsx",最大16384(XFD,2的14次方)列,最大1048576(2的20次方)行;

即横向16384个单元格,

竖向1048576个单元格。

解决办法:1、把HSSFWorkbook改为XSSFWorkbook,把导出文件类型改为.xlsx。

2、行数达到65535就换一页(sheet)

修改前的代码:

        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet();
        //添加表头
        Row row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("序号");
        row1.createCell(1).setCellValue("资产名称");
        row1.createCell(2).setCellValue("规格型号");
        row1.createCell(3).setCellValue("计量单位");
        row1.createCell(4).setCellValue("资产编号");
        row1.createCell(5).setCellValue("批次号");
        row1.createCell(6).setCellValue("生产厂家");
        row1.createCell(7).setCellValue("资产状态");
        row1.createCell(8).setCellValue("操作人");
        row1.createCell(9).setCellValue("手机号");
        row1.createCell(10).setCellValue("操作时间");
        //添加内容
        for (int i = 1; i < data.size()+1; i++) {
            Row row = sheet.createRow(i);
            List<String> rowData = data.get(i-1);
            for (int j = 0; j < rowData.size(); j++) {
                Cell cell = row.createCell(j);
                cell.setCellValue(rowData.get(j));
            }
        }

修改后的代码:

        添加表头的代码不变
        //添加数据,Excel一张(或者说一页)默认行数是65535,如果超过,要sheet分页
        int sheetIndex = 0;//记录额外创建的sheet数量
        Row row;
        for (int i = 1; i < data.size()+1; i++) {
            List<String> rowData = data.get(i-1);
            //建新的sheet
            if (i%65000 == 0){
                sheet = workbook.createSheet();
                row = sheet.createRow(0);
                for (int j = 0; j < rowData.size(); j++) {
                    Cell cell = row.createCell(j);
                    cell.setCellValue(rowData.get(j));
                }
                sheetIndex++;
            }
            //写入数据
            row = sheet.createRow(i-sheetIndex*65000);
            for (int j = 0; j < rowData.size(); j++) {
                Cell cell = row.createCell(j);
                cell.setCellValue(rowData.get(j));
            }
        }

经过测试,问题解决,达到设置的行数会自动换一个sheet

参考:Invalid row number (65536) outside allowable range (0..65535)-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值