EasyExcel完成excel文件的导入导出

简介

常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064518.html]。
这篇主要针对EasyExcel,它是阿里巴巴开源的一个excel处理框架,使用简单,节省内存。解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析,因此大大减少占用内存。官网:[https://github.com/alibaba/easyexcel]。

入门案例

一、导入pom依赖


        com.alibaba
        easyexcel
        2.1.7

        org.slf4j
        slf4j-simple
        1.7.5

        org.apache.xmlbeans
        xmlbeans
        3.1.0

        org.projectlombok
        lombok
        1.18.12

        junit
        junit
        4.12

二、创建实体类

java\ @Data public class ExcelStudentDTO {</p> <pre><code>@ExcelProperty("姓名") private String name; @ExcelProperty("生日") private Date birthday; @ExcelProperty("薪资") private Double salary; </code></pre> <p>}</p> <pre><code> ## 三、导出excel
public class ExcelWriteTest {
@Test
public void simpleWriteXlsx() {
String fileName = "d:/excel/simpleWrite.xlsx"; //需要提前新建目录
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelStudentDTO.class).sheet("模板").doWrite(data());
}

//辅助方法
private List data(){
List list = new ArrayList<>();

//算上标题,做多可写65536行
//超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
for (int i = 0; i < 65535; i++) {
ExcelStudentDTO data = new ExcelStudentDTO();
data.setName("Helen" + i);
data.setBirthday(new Date());
data.setSalary(123456.1234);
list.add(data);
}

return list;
}
}

四、读取Excel

– 创建监听器

@Slf4j
public class ExcelStudentDTOListener extends AnalysisEventListener {

    /**
     * 这个每一条数据解析都会来调用
     */
    @Override
    public void invoke(ExcelStudentDTO data, AnalysisContext context) {
        log.info("解析到一条数据:{}", data);

    }

    /**
     * 所有数据解析完成了 都会来调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        log.info("所有数据解析完成!");
    }
}

– 读取数据

public class ExcelReadTest {

    /**
     * 最简单的读
     */
    @Test
    public void simpleReadXlsx() {

        String fileName = "d:/excel/simpleWrite.xlsx";
        // 这里默认读取第一个sheet
        EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener()).sheet().doRead();
    }

    @Test
    public void simpleReadXls() {

        String fileName = "d:/excel/simpleWrite.xls";
        EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener()).excelType(ExcelTypeEnum.XLS).sheet().doRead();
    }
}

Original: https://www.cnblogs.com/jasmine-e/p/16064768.html
Author: 素衣黛眉
Title: EasyExcel完成excel文件的导入导出

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620077/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 游戏协议安全测试

    测试人员通过第三方工具篡改游戏客户端发送给服务器的协议,达到测试服务器逻辑、挖掘游戏漏洞的一种测试行为,称之为游戏协议安全测试。 协议测试的作用是测试服务器逻辑的漏洞,避免游戏上线…

    Java 2023年6月5日
    0129
  • JDK内置锁深入探究

    本文讲述仅针对 JVM 层次的内置锁,不涉及分布式锁。 锁有多种分类形式,比如公平锁与非公平锁、可重入锁与非重入锁、独享锁与共享锁、乐观锁与悲观锁、互斥锁与读写锁、自旋锁、分段锁和…

    Java 2023年6月6日
    086
  • Class.getResource(“/”)之为什么需要”/”

    Class.getResource(“/”)之为什么需要”/” 结论 Class.getResource真正调用ClassLoade…

    Java 2023年6月7日
    075
  • SpringBoot中整合knife4j接口文档

    界面欣赏 1.首页 2.接口文档 3.调试 二、整合 knife4j 1、引入 maven 依赖 com.github.xiaoymin knife4j-spring-boot-s…

    Java 2023年6月6日
    067
  • java学习之springboot

    0x00前言 呀呀呀时隔好久我又来做笔记了,上个月去大型保密活动了,这里在网上看了一些教程如果说不是去做java开发我就不做ssm的手动整合了采用springboot去一并开发。S…

    Java 2023年6月13日
    072
  • Java反射基础

    Java作为一门动态的语言,有非常成熟的框架技术以供我们使用,而这一切都离不开Java反射技术的支持。通过Java反射,我们可以动态的创建和使用对象,使用灵活,没有反射机制,就无法…

    Java 2023年6月8日
    082
  • Java五道输出易错题解析(避免小错误)

    收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了。 下面的输出会正常吗? 解析:将上面代码复制下(不要自己手敲)在自己的环境里运行看看,是不是…

    Java 2023年5月29日
    072
  • JAVA递归生成树形菜单

    本文转载自:https://www.cnblogs.com/lucky-pin/p/10740037.html 这篇文章写得很好,解决了我的一个需求问题。 递归生成一个如图的菜单,…

    Java 2023年5月29日
    090
  • SpringBoot + JWT + Redis 开源知识社区系统

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!:https://javaguide.cn/ 你好,…

    Java 2023年6月9日
    088
  • Rubinius 2.0 发布,Ruby 虚拟机

    Rubinius 2.0 发布了,官方发行说明请看这里。 Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库。 Rubinius的设计决定了其调试功能的强大,使…

    Java 2023年5月30日
    092
  • 3、关注、取消关注 与 关键字回复

    上一篇结尾已经说了关注(取消) 与 普通消息发送区别,所以程序更改如下就可以实现关注、取消关注 与 关键字回复三种不同处理 java;html-script:false;quick…

    Java 2023年6月13日
    0120
  • spring data jpa动态查询返回自定义对象

    动态查询返回自定义对象 1、一般情况下使用spring jpa封装的JpaSpecificationExecutor和JpaRepository的接口,这个好处就是在于很多方法jp…

    Java 2023年6月8日
    075
  • 设计模式——行为型设计模式

    行为型设计模式 针对对象之间的交互 解释器模式 java中用的很。JVM编译的时候就是对我们写的代码进行了解释操作;数据库SQL语句亦是如此 解释器:对语言进行解释,根据不同语义来…

    Java 2023年6月14日
    088
  • Linux(RedHat、Ubuntu)安装docker

    Linux(RedHat、Ubuntu)安装docker 前言 docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的…

    Java 2023年6月15日
    060
  • HTML页面打印

    <style media=print>.Noprint{display:none;}style> <object id="WebBrowser&q…

    Java 2023年6月16日
    071
  • java.security.InvalidKeyException: Illegal key size

    今天在使用idea打包maven项目时,出现这个错误:java.security.InvalidKeyException: Illegal key size。(测试也可能会出现这个…

    Java 2023年5月29日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球