zoukankan      html  css  js  c++  java
  • 用EasyExcel实现对excel的写和读操作

    1.概念理解

    EasyExcel是阿里巴巴提供的一个针对excel的一个简单高效的框架,它可以用最简洁的代码,最高效地实现对excel的读和写操作。

    2、EasyExcel特点

    • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
    • EasyExcel是阿里巴巴开源的一个excel处理框架以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
    • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

    3.使用EasyExcel需要引入的依赖

    <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.1</version>
    </dependency>
    

    在IDEA中安装lombok插件,并引入依赖,Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。

    • 在该演示中,我只用到了@Data这个注解,它帮我们自动生成了属性的getter、setter方法
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
    </dependency>
    

    4.使用EasyExcel进行写操作

    第一步:创建实体类,和excel中数据对应

    @Data
    public class DemoData {
    
        //设置excel表头名称和属性
        @ExcelProperty("学生编号")
        private Integer sno;
        @ExcelProperty("学生姓名")
        private String sname;
    }
    

    第二步:测试

    public class TestEasyExcel {
        public static void main(String[] args) {
            /*实现excel写操作*/
            //1.设置写入文件夹地址和excel文件名称
            String filename = "E:\student.xlsx";					//要写入的文件位置
            //2.调用easyexcel里面的方法实现写操作
            //write方法两个参数:第一个参数为文件路径名称,第二个参数实体类class
            EasyExcel.write(filename, DemoData.class).sheet("学生列表").doWrite(getData());
    
        }
    
        //将创建的多个对象添加到列表中
        private static List<DemoData> getData(){
            List<DemoData> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                DemoData data = new DemoData();
                data.setSno(i);
                data.setSname("至尊宝" + i);
                list.add(data);
            }
            return list;
        }
    }
    

    第三步:查看结果

    5.使用EasyExcel进行读操作

    读操作与写操作稍有不同,需创建一个监听类,下面将上面写出的文件E:student.xlsx进行读取。

    第一步:创建和excel对应的实体类,标记对应的列关系

    @Data
    public class DemoData {
        //设置excel表头名称,设置列的索引,从0开始
        @ExcelProperty(value = "学生编号",index = 0)
        private Integer sno;
    
        @ExcelProperty(value = "学生姓名",index = 1)
        private String sname;
    }
    

    第二步:创建监听进行excel文件读取【核心】

    • 读取一行,解析一行
    • 需继承AnalysisEventListener类
    public class ExcelListener extends AnalysisEventListener<DemoData> {
    
        //一行一行读取excel内容,从第二行(除表头)开始读
        @Override
        public void invoke(DemoData data, AnalysisContext analysisContext) {
            System.out.println("每一行" + data);
        }
    
        @Override
        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
            System.out.println("表头:" + headMap);
        }
    
        //读取完之后执行
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    
        }
    }
    

    第三步:测试

    public class TestEasyExcelRead {
        public static void main(String[] args) {
            //实现excel读操作
            String s = "E:\student.xlsx";
            EasyExcel.read(s,DemoData.class,new ExcelListener()).sheet().doRead();
        }
    }
    

    第四步:控制台结果

    相信自己,你能行!!!
  • 相关阅读:
    十六.jQuery源码解析之Sizzle设计思路.htm
    关于微信浏览不能URL传参,URL中的问号被删除
    websocket 通信协议
    java_httpservice
    Socket.Io 做个标记 下来了解下
    通过netty实现服务端与客户端的长连接通讯,及心跳检测。
    NETTY 编码器介绍
    Netty4.0学习教程
    FORM表单不刷新提交POST数据
    Linux0.11学习
  • 原文地址:https://www.cnblogs.com/byd-hold-on/p/14366143.html
Copyright © 2011-2022 走看看