Spring Boot POI-生成excel并下载

1.导入依赖

此处需要导入两个依赖,一个对应07版本的excel,一个对应03版本的excel。

        <!--poi对excel 2007以上版本支持-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>
        <!--poi对excel 2003以下版本的支持-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>

2.控制层

    @GetMapping("/exportExcel")
    public void exportExcel(HttpServletResponse response) {
        List<Company> companies = this.companyService.findAll();
        List<Map<String, String>> companyExcel = new ArrayList<>();

        companies.forEach(company -> {
            Map<String, String> map = new HashMap<>();
            map.put("id", company.getId().toString());
            map.put("name", StringUtils.isBlank(company.getCname()) ? "" : company.getCname());
            map.put("type", company.getCompanyType() != null ? company.getCompanyType().toString() : "");
            companyExcel.add(map);
        });
        this.companyService.exportExcel(companyExcel, response);
    }

3.业务层

public void exportExcel(List<Map<String, String>> excelList, HttpServletResponse response) {

        /**
         * 
         * XSSFWorkbook对应07版本的Excel,HSSFWrokbook对应03版的Excel
         * SXSSFWorkbook则是07版的升级版,支持大量的数据写入,并且速度快,但需要手动清理临时        
         * 文件
         * 注意:XSSF对应的文件后缀:.xlsx HSSF对应:.xls
         */

        // 创建workbook相当于创建一个excel文件
        XSSFWorkbook workbook = new XSSFWorkbook();
        // sheet相当于excel表格中下方的不同的表
        XSSFSheet sheet = workbook.createSheet();

        // Row则对应Excel中的行,初始化所有行
        int size = excelList.size();
        Row[] row = new Row[size + 1];
        for (int i = 0; i < size + 1; i++) {
            row[i] = sheet.createRow(i);
        }

        // Cell相当于单元格,也可以理解为列。因为数据需要三列,所以此处创建了3列
        // 第一行设值
        row[0].createCell(0).setCellValue("公司ID");
        row[0].createCell(1).setCellValue("公司名字");
        row[0].createCell(2).setCellValue("公司类型");

        // 从第二行开始设置值
        for (int i = 0; i < size; i++) {
            Map<String, String> company = excelList.get(i);
            row[i + 1].createCell(0).setCellValue(company.get("id"));
            row[i + 1].createCell(1).setCellValue(company.get("name"));
            row[i + 1].createCell(2).setCellValue(company.get("type"));
        }

        try (ServletOutputStream outputStream = response.getOutputStream()) {
            String fileName = URLEncoder.encode("公司统计.xlsx", "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

4.07版Excel和03版Excel区别

HSSF

  • 优点:过程写入内存,不操作磁盘,速度快
  • 缺点:最多只能写入65536行

XSSF

  • 优点:支持超出65536行的数据写入
  • 缺点:写数据速度慢,耗内存,会造成内存溢出

SXSSF

  • 优点:XSSF的升级版,可以写入更多的数据,并且速度比XSSF快

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值