zoukankan      html  css  js  c++  java
  • java用POI导出Excel

      架构SSM + Maven

    一、添加依赖:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.11</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.11</version>
    </dependency>

    二、controller层导出:

    (1)HSSFWorkbook工具类(导出.xls格式文件)

        HSSFWorkbook对象,最多支持65535行,适用一般数据量少导出

        @RequestMapping(value = "/exportExcel")
        public void exportallCusTNList(HttpServletRequest request,HttpServletResponse response) {
            String clSchWorkID = request.getParameter("clSchWorkID");
            // 创建excel
            Workbook wb = new HSSFWorkbook();
            try {
                List<Cllog> cllogList = cllogService.getCusTNListBySchWorkId(clSchWorkID);
    
                // 创建一张工作表
                HSSFSheet sheet = wb.createSheet("sheet1");
                // 设置单元格宽度
                sheet.setColumnWidth(0, "列名".getBytes().length*2*256);
                sheet.setColumnWidth(1, "列名".getBytes().length*2*256);
                // 创建第一行
                HSSFRow row = sheet.createRow(0);
                // 创建第一行的列并向单元格写值
                HSSFCell cell = row.createCell(0);
                cell.setCellValue("序列号");
                cell = row.createCell(1);
                cell.setCellValue("手机型号");
    
                // 写入数据
                for (short i=0;i<cllogList.size();i++)
                {
                    row = sheet.createRow(i+1);
                    row.createCell(0).setCellValue(String.valueOf(i+1));
                    row.createCell(1).setCellValue(cllogList.get(i).getClCustn());
                }
                // 文件名
                String fileName = "序列号" + clSchWorkID + "手机清单.xls";
                // 解决文件乱码
                final String userAgent = request.getHeader("user-agent");
                if (userAgent != null && userAgent.indexOf("Firefox") >= 0) {
                    fileName = new String(fileName.getBytes(), "ISO8859-1");
                } else {
                    fileName = URLEncoder.encode(fileName, "UTF8");
                }
                // 下载文件
                response.setContentType("application/octet-stream");
                response.setHeader("Content-disposition", "attachment;filename="+fileName);
                response.flushBuffer();
                wb.write(response.getOutputStream());
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(wb != null) {
                    try {
                        wb.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

     如果用HSSFWorkbook对象创建xlsx对象,用WPS可以打开,但是用office打开会出现如下错误:

     

    (2)SXSSFWorkbook工具类(导出.xlsx格式文件,适用于数据量大的文件导出)

            SXSSFWorkbook对象,只支持.xlsx格式。它就是用来解决大数据量以及超大数据量的导入导出操作的,单个sheet表就支持近104万条数据了。要是导出104万以上的数据,这时我们必须拆分到多个工作表来实现  

            // 只添加跟HSSFWorkBook不一样的代码
            // 创建excel       
            Workbook wb = new SXSSFWorkbook()        
            // 创建一张工作表
            Sheet sheet = wb.createSheet("sheet1");
            // 设置单元格宽度
           sheet.setColumnWidth(0, "列名".getBytes().length*2*256);
           sheet.setColumnWidth(1, "列名".getBytes().length*2*256);
            // 创建第一行
            Row row = sheet.createRow(0);
            // 创建第一行的列并向单元格写值
            Cell cell = row.createCell(0);
        
           // 文件名
            String fileName = "序列号" + clSchWorkID + "手机清单.xlsx";

    参考文章:https://www.cnblogs.com/Big-Boss/p/10002739.html

    参考文章:https://blog.csdn.net/a602049511/article/details/52367563/

    ——与君共勉

  • 相关阅读:
    程序员 你中毒了吗?
    Win8 下安装 Live Writer 发布博客
    Rational Rose 2003 下载及破解方法(转载)
    如何在dos 下使用csc.exe命令?
    as 与 is
    【转载】关于工资的三个秘密
    C#反射(1)<转>
    C#常用字符串格式
    微软企业库EntLib5.0使用过程中常见的异常
    关于window7 AERO 声音 IIS 无线网络失效的解决办法
  • 原文地址:https://www.cnblogs.com/steveshao/p/11851006.html
Copyright © 2011-2022 走看看