解决java poi导出excel2003不能超过65536行的问题

java poi在导出数据到excel2003工作表中时一个工作表只能存储65536行数据,如果超过这个数据就会失败,excel2007并没有这个问题,但是为了兼容性我们通常都是导出到2003版本上的。

1、导出成xlsx格式。

2、达到某个数值就再创建一张工作表。

    /**
     * 如果达到50000条数据则重新创建工作表的逻辑
     */
    @Override
    public void exportExcel(List<HolidayItemForm> formList, ServletOutputStream outputStream){
        try {
            //工作表名后面的数字,如表1,表2
            int i = 0;
            //记录总行数
            int rownum = 0;
            //记录每个sheet的行数
            int tempnum = 0;
            //分页条数达到此条数则创建工作表
            int page = 5;
            //创建工作薄
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建列标题栏样式
            HSSFCellStyle cellStyle = ExcelUtils.createCellStyle(workbook, (short)10);
            while(true){
                //创建工作表并应用上面的样式
                HSSFSheet sheet = ExcelUtils.createWorkbook(workbook,cellStyle,++i);
                rownum++;
                //将数据库中的数据列表写入excel中
                if(formList != null){
                    tempnum = 0;
                    for (int j=rownum-i; j<formList.size(); j++) {
                        //进入第2个sheet写出的行数从第2条数据开始(++tempnum等于1,因为标题行占了1行)
                        HSSFRow row2 = sheet.createRow(++tempnum);
                        rownum++;
                        row2.createCell(0).setCellValue(formList.get(j).getUserId());
                        row2.createCell(1).setCellValue(formList.get(j).getUserName());
                        row2.createCell(2).setCellValue(formList.get(j).getDeptName());
                        row2.createCell(3).setCellValue(formList.get(j).getUserJob());
                        row2.createCell(4).setCellValue(formList.get(j).getTypeName());
                        row2.createCell(5).setCellValue(formList.get(j).getBeginDate());
                        row2.createCell(6).setCellValue(formList.get(j).getEndDate());
                        row2.createCell(7).setCellValue(formList.get(j).getHolidayHour());
                        row2.createCell(8).setCellValue(formList.get(j).getCreateDate());
                        //达到5条退出并创建另外一个sheet
                        if(rownum%page == 0){
                            break;
                        }
                    }
                }
                //如果记录的行数等于集合的总行数则退出
                if((rownum-i) == formList.size()){
                    break;
                }
            }
            //输出
            workbook.write(outputStream);
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

参考:https://blog.csdn.net/wjycgl/article/details/53942818

原文地址:https://www.cnblogs.com/day1day1up/p/11333968.html

时间: 2024-11-09 05:12:08

解决java poi导出excel2003不能超过65536行的问题的相关文章

解决Java POI导出海量Excel数据内存溢出

使用POI导出Excel数据的时候有两个方法可以创建WorkBook: HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx 当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space内存溢出错误. 从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API,也就是SXS

解决Java POI 导出Excel时文件名中文乱码,兼容浏览器

String agent = request.getHeader("USER-AGENT").toLowerCase();   response.setContentType("application/vnd.ms-excel");   String fileName = "文件名";   String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");

重构:以Java POI 导出EXCEL为例

重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的了解重构的意义. 什么是重构? <重构:改善既有代码的设计>这本书中将重构以名词和动词形式进行解释,如下 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本. 重构(动词):使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构.

解决Android单个dex文件不能超过65536个方法问题

当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误.当出现这个错误时说明你本身自己的工程代码中含有的太多的方法,或者你的工程lib文件夹下引用的第三方插件jar包有太多的方法,这两者的方法加起来已经超过了65536这个数目.而谷歌规定单个dex文件中的方法不能超过65536的限制. 那么这个时候,我们就需要分包处理解决.一般情况下的解决方案就是把整个项目工程包括jar,区分开来分解成两个d

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

Java POI 导出EXCEL经典实现 Java导出Excel

转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有

java poi导出excel response.setHeader设置导出文件名抓包不合法及处理导出文件名为action方法名

问题出现1: spring MVC 框架下使用poi导出excel,设置导出文件名:response.setHeader("Content-Disposition", "attachment;filename=" +sourceId+"_"+dateString+".xls"); 该方法进行抓包测试时,显示BUG url不合法. 解决办法:对 "attachment;filename=" +sourceId

Pandas 读取超过 65536 行的 Excel 文件

Excel 文件的格式曾经发生过一次变化,在 Excel 2007 以前,使用扩展名为 .xls 格式的文件,这种文件格式是一种特定的二进制格式,最多支持 65,536 行,256 列表格.从 Excel 2007 版开始,默认采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行数达到了 1,048,576,列数达到了 16,384.需要注意的是,将 .xlsx 格式的文件转换为 .xls 格式的文件时,65536 行和 256 列之后的数据都会被丢弃. Pandas 读取 Excel

java:POI导出excel

POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1.maven中先添加依赖项 1 <dependency> 2 <groupId>org.apache.poi</groupId> 3 <artifactId>poi</artifactId> 4 <version>3.11</version> 5 </dependency> 2.最基本