zoukankan      html  css  js  c++  java
  • 解决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

  • 相关阅读:
    OA学习笔记-009-岗位管理的CRUD
    OA学习笔记-008-岗位管理Action层实现
    OA学习笔记-007-Dao层设计
    OA学习笔记-006-SPRING2.5与hibernate3.5整合
    OA学习笔记-005-Spring2.5与struts2.1整合
    OA学习笔记-004-Spring2.5配置
    OA学习笔记-003-Hibernate3.6配置
    OA学习笔记-002-Sruts2.1配置
    OA学习笔记-001-项目介绍
    Swift
  • 原文地址:https://www.cnblogs.com/day1day1up/p/11333968.html
Copyright © 2011-2022 走看看