当前位置: 首页 > article >正文

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博客


http://www.kler.cn/news/328224.html

相关文章:

  • thinkphp6开发的通用网站系统源码
  • UI设计师面试整理-问题应对策略
  • Python从入门到高手4.1节-掌握条件控制语句
  • Rockchip RK3588 Android SDK编译方法
  • JWT(JSON Web Token)的介绍
  • 物理学基础精解【41】
  • 上位机图像处理和嵌入式模块部署(软硬结合才是嵌入式的精髓)
  • Elasticsearch基础_2.数据类型
  • python网站创建001:内容概览
  • 机器学习常用的评价指标原理和代码
  • 支持分页的环形队列
  • SqlSugar使用
  • JMeter 性能测试基本过程及示例
  • Spring Web MVC课后作业
  • [前端][easyui]easyui select 默认值
  • Java 编码系列:泛型详解与面试题解析
  • 探索Android折叠屏设备的分屏适配
  • 熔断降级 请求合并 请求缓存 线程池隔离 信号量隔离 openfeign整合Hystrix
  • 2024年10月CISAW课程安排
  • 预处理详解
  • 深入浅出MongoDB(三)
  • Linux gadget 模拟触控屏 支持多点触控
  • 【监控体系搭建三】Docker部署PrometeusGrafana
  • Linux网络命令:用于管理和查询系统名称解析器(DNS)的实用工具resolvectl详解
  • 【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
  • TypeScript 设计模式之【状态模式】
  • JavaScript Set基础与实战应用
  • 基于大数据的健身器材销售数据分析及可视化系统
  • Python:lambda 函数详解 以及使用
  • 如何在本地和远程删除 Git 分支