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/

——与君共勉

原文地址:https://www.cnblogs.com/steveshao/p/11851006.html