zoukankan      html  css  js  c++  java
  • EasyExcel使用

    一、EasyExcel特点

    1. Java 领域解析、生成 Excel 比较有名的框架有 Apache poi、jxl 等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会 OOM 或者 JVM 频繁的 FULL GC。

    2. EasyExcel 是阿里巴巴开源的一个 excel 处理框架,以使用简单、节省内存著称。 EasyExcel 能大大减少占用内存的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

    3. EasyExcel 采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

    简单地理解:可以方便、快速的读取、写入 execl 内容。

    【官方文档地址:】
    https://alibaba-easyexcel.github.io/index.html
    https://www.yuque.com/easyexcel

    二、Excel的应用场景及优势

    1. 数据导入:减轻录入工作量

    2. 数据导出:统计信息归档

    3. 数据传输:异构系统之间数据传输

    EasyExcel优势:

    注解式自定义操作。
    输入输出简单,提供输入输出过程的接口
    支持一定程度的单元格合并等灵活化操作

    三、常用注解

    • @ExcelProperty:指定当前字段对应 excel 中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名字去匹配。千万别三个混着用,除非你非常了解源代码中三个混着用怎么去排序的。

    • @ExcelIgnore:默认所有字段都会和excel去匹配,加了这个注解会忽略该字段

    • @DateTimeFormat:日期转换,用 String 去接收 excel 日期格式的数据会调用这个注解。里面的 value 参照 java.text.SimpleDateFormat

    • @NumberFormat:数字转换,用 String 去接收 excel 数字格式的数据会调用这个注解。里面的 value 参照 java.text.DecimalFormat

    • @ExcelIgnoreUnannotated:默认不加 ExcelProperty 的注解的都会参与读写,加了不会参与

    四、使用EasyExcel

    1. 导入依赖

      <!-- easyexcel 主要依赖  这一个基本上就够了-->
    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>easyexcel</artifactId>
       <version>2.1.4</version>
    </dependency>
    

    2.创建实体类

    @ExcelProperty注解也可以用index进行索引设置表头顺序

    @HeadRowHeight(30) // 标题高度
    @ContentRowHeight(30) // 内容高度
    @ColumnWidth(16) // 行高
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class UserVo {
    
        @ExcelProperty("编号")
        @ColumnWidth(40)
        private String id;
    
        @ExcelProperty("名称")
        private String name;
    
        @ExcelProperty("性别")
        private String sex;
    
        @ExcelProperty("地址")
        @ColumnWidth(25)
        private String address;
    
        @ExcelProperty("电话")
        @ColumnWidth(25)
        private String phone;
    
    }
    

    3.导出为Excel

    创建Controller,访问接口下载导出Excel

    @Controller
    public class TestController {
    
        @GetMapping("/excel")
        public void excel(HttpServletResponse response) {
    
            List<UserVo> list = new ArrayList<>();
            for (int i = 1; i <= 11; i++) {
                UserVo userVo = new UserVo(UUID.randomUUID().toString(),
                        (i % 2 == 0 ? "吕" : "蓝") + "某某",
                        i % 2 == 0 ? "女" : "男",
                        "广东省广州市第" + i + "区",
                        "4404-" + String.valueOf(i * 31 * 31));
                list.add(userVo);
            }
    
            try {
                // 响应的内容类型为excel
                response.setContentType("application/vnd.ms-excel");
                // 指定服务器响应给浏览器的编码
                response.setCharacterEncoding("utf-8");
                // 通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文,这里URLEncoder.encode可以防止中文乱码
                String fileName = URLEncoder.encode("用户列表" + System.currentTimeMillis(), "utf-8");
                response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
                // 获取通向浏览器的字节流
                ServletOutputStream outputStream = response.getOutputStream();
                // 导出列表内容到输出流中
                EasyExcel.write(outputStream, UserVo.class)
                        .sheet("sheet")
                        .doWrite(list);
    
            } catch (IOException e) {
                System.err.println("导出Excel失败:" + e);
            }
    
        }
    }
    

    导出结果
    image

  • 相关阅读:
    计算机科学中最重要的32个算法
    主流无线传输技术GPRS与CDMA之对比
    GPRS、GSM、WAP、CDMA 、EDGE和3G区别
    TCP与UDP的区别
    web自动化测试(java)---测试过程中遇到的错误合集
    web自动化测试(java)---环境搭建
    Java之基础学习(数据类型、运算符、分支语句和循环语句)
    OSI七层模型和tcp/ip四层模型对比
    测试工具之Match Tracer(正则表达式匹配工具)
    测试工具之RobotFramework关键字和快捷键
  • 原文地址:https://www.cnblogs.com/Dm920/p/15383447.html
Copyright © 2011-2022 走看看