首页 > 其他分享 >EasyExcel实现读写操作

EasyExcel实现读写操作

时间:2023-10-16 16:00:56浏览次数:40  
标签:读写操作 实现 excel EasyExcel list DemoData new class

(1)Excel导入导出的应用场景

① 数据导入:减轻录入工作量

② 数据导出:统计信息归档

③ 数据传输:异构系统之间数据传输

(2)EasyExcel 简介

EasyExcel的特点:

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

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

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

(3)GitHub 地址:

EasyExcel实现读写操作_数据

https://github.com/alibaba/easyexcel

(4)测试 EasyExcel 写操作

① 引入 EasyExcel 依赖,EasyExcel 对 poi 的封装

注意:单独使用,还需要引入 poi 的依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.2</version>
        </dependency>
    </dependencies>

② 在 src/test/java 下创建包:com.xzy.edu.service.edu.excel

创建包:model

创建实体类 DemoData,与 Excel 数据对应

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoData {
    // 设置 Excel 表头名称
    @ExcelProperty("id")
    private int id;
    @ExcelProperty("name")
    private String name;
    @ExcelProperty("sex")
    private String sex;
    @ExcelProperty("age")
    private int age;
}

创建包:main

public class MyTest {
    public static void main(String[] args) {
        // 实现 excel 写操作
        // 1、设置写入excel数据的文件夹路径和名称
        String filePath = "D:\\student.xls";
        /*
         * 2、调用 EasyExcel 中的方法实现写操作
         *  参数 1:文件路径名称
         *  参数 2:实体类的 class 类型
         */
        EasyExcel.write(filePath, DemoData.class).sheet("学生信息列表").doWrite(getData());
    }

    // 实现 excel 写操作
    public static void readFromExcel(){
        // 1、设置写入excel数据的文件夹路径和名称
        String filePath = "D:\\student.xls";
        EasyExcel.read(filePath, DemoData.class, new ExcelListener()).sheet().doRead();
    }
    // 方法:返回 List 集合
    private static List<DemoData> getData(){
        List<DemoData> list = new ArrayList<DemoData>();
       List<DemoData> list = new ArrayList<DemoData>();
        DemoData data1 = new DemoData(1001,"博","男",21);
        DemoData data2 = new DemoData(1002,"博博","男",23);
        DemoData data3 = new DemoData(1003,"啵啵啵","女",20);
        DemoData data4 = new DemoData(1004,"博博博博","男",22);
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        return list;
    }
}

(5)测试 EasyExcel 读操作

① 在 src/test/java 下创建包:com.xzy.edu.service.edu.excel.listener

创建监听类 ExcelListener

public class ExcelListener extends AnalysisEventListener<DemoData> {
    // 一行一行读取 excel 表格中的数据
    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println("***** " + demoData);
    }
    // 读取表头内容
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:" + headMap);
    }
    // 读取完成之后
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

② 修改实体类 DemoData


@Data
@AllArgsConstructor
@NoArgsConstructor

public class DemoData {

    // 设置 Excel 表头名称

    @ExcelProperty("id")

    private int id;

    @ExcelProperty("name")

    private String name;

    @ExcelProperty("sex")

    private String sex;

    @ExcelProperty("age")

    private int age;

}

③ 修改主类 MyTest

public class ReadTest {
    public static void main(String[] args) {
        // writeToExcel();
        readFromExcel();
    }
    // 实现 excel 写操作
    public static void writeToExcel(){
        // 1、设置写入excel数据的文件夹路径和名称
        String filePath = "D:\\student.xls";
        /*
         * 2、调用 EasyExcel 中的方法实现写操作,流对象会自动关闭
         *  参数 1:文件路径名称
         *  参数 2:实体类的 class 类型
         */
        EasyExcel.write(filePath, DemoData.class).sheet("学生信息列表").doWrite(getData());
    }
    // 实现 excel 写操作
    public static void readFromExcel(){
        // 1、设置写入excel数据的文件夹路径和名称
        String filePath = "D:\\student.xls";
        EasyExcel.read(filePath, DemoData.class, new ExcelListener()).sheet().doRead();
    }
    // 方法:返回 List 集合
    private static List<DemoData> getData(){
        List<DemoData> list = new ArrayList<DemoData>();
        DemoData data1 = new DemoData(1001,"博","男",21);
        DemoData data2 = new DemoData(1002,"博博","男",23);
        DemoData data3 = new DemoData(1003,"啵啵啵","女",20);
        DemoData data4 = new DemoData(1004,"博博博博","男",22);
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        return list;
    }
}

标签:读写操作,实现,excel,EasyExcel,list,DemoData,new,class
From: https://blog.51cto.com/u_16230968/7886741

相关文章

  • 基于X86六轮差速移动机器人运动控制器设计与实现(二)规划控制算法
    带输入约束的MPC路径跟踪控制MPC算法是一种基于控制对象模型的控制方法,其优势在于在控制中考虑了系统的多种物理约束,同时基于模型与当前机器人的反馈信息预估出未来机器人位姿信息的处理方法可以解决控制迟滞的问题。4.1MPC路径跟踪控制器框架根据第......
  • JS 实现模拟键盘事件
    //获取事件需要绑定的节点varinp=document.getElementById('id')//创建初始化event事件varevent=newKeyboardEvent("keyup",{which:13,keyCode:13,key:'Enter',code:'Enter'});//执行inp.dispatchEvent(event) 参考:https://develo......
  • java实现大文件传输
    简介在现代互联网中,我们经常需要传输大文件,例如视频、音频或者大型数据文件。传输大文件需要考虑诸多因素,例如网络延迟、带宽限制和传输安全性。在本文中,我们将介绍如何使用Java实现大文件传输,并提供相应的代码示例。文件传输协议在进行大文件传输之前,我们需要选择合适的传输协议......
  • 组合模式--Java实现
    画类图以文件夹浏览为例;具体代码实现//AbstractFile.javapackageorg.example.design008;publicabstractclassAbstractFile{publicabstractvoidadd(AbstractFileelement);publicabstractvoidremove(AbstractFileelement);publicabstractvoid......
  • Avalonia 实现视频聊天、远程桌面(源码,支持Windows、Linux、国产OS)
      现在最火的.NET跨平台UI框架莫过于Avalonia了。Avalonia基于.NETCore,因此它可以运行在任何支持.NETCore的平台上。之前基于CPF跨平台UI框架写过一个视频聊天的demo,而现在看来Avalonia是大势所趋,于是,我再写一个Avalonia版本的Demo来供大家参考,它可以在Windows和Linux(包括国......
  • KdMapper扩展实现之AVG(aswArPot.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称aswArPot.sys 时间戳5FC......
  • Java上传大文件实现方法
    简介在开发过程中,我们经常会遇到需要上传大文件的需求。本文将教会你如何用Java实现上传大文件的功能。整体流程首先,让我们来看一下实现上传大文件的整体流程。下面是一个流程表格:步骤 描述1 创建一个文件上传表单2 在后端编写一个接收上传文件的控制器3 将上传的文件保存到服务......
  • Elasticsearch——terms聚合实现搜索热词统计
     最近项目中遇到一个需求。需要实现热词功能,需要给用户展示检索频率最高的10个关键字;由于项目中使用到了es,所以就使用es实现,具体实现如下:前提,拥有es环境;1、创建索引:POSThttp://localhost:9200/hotwords_test/_mapping{"properties":{"search_txt":{......
  • 网页CAD二次开发(WEB CAD SDK)实现单行和多行文字的绘制
    前言今天讲一下如何利用WEBCADSDK来绘制单行文字和多行文字,在使用mxcad绘制文字之前请先按照mxcad文档,将cad图纸在网页上渲染出来,如果没有阅读mxcad文档可能无法理解后续代码。在线CAD功能测试:https://demo.mxdraw3d.com:3000/mxcad/   绘制文字和多行文字单行文字代......
  • Avalonia 实现视频聊天、远程桌面(源码,支持Windows、Linux、国产OS)
        现在最火的.NET跨平台UI框架莫过于Avalonia了。Avalonia基于.NETCore,因此它可以运行在任何支持.NETCore的平台上。之前基于CPF跨平台UI框架写过一个视频聊天的demo,而现在看来Avalonia是大势所趋,于是,我再写一个Avalonia版本的Demo来供大家参考,它可以在Windows和Linux......