EasyExcel快速入门

报表导出是实际工作中必须学会的一个东西,我们如何通过Java代码来导出Mysql的数据到我们的Excel报表中?这个时候就要用到我们的EasyExcel了。本文是B站EasyExcel快速入门的总结,可以在2小时内快速入门EasyExcel的使用

文章内容来源:bilibili


快速入门案例

需要的依赖

复制代码
   <!-- EasyExcel -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>4.0.3</version>
        </dependency>

        <!-- lombok 优雅编程 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- 文件上传 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.17.0</version>
        </dependency>

基本的导出和写入Demo

看看相关实体类

ExcelReaderBuilder的sheet()方法

首先我们不管是用EasyExcel来read还是wirte,我们返回的对象是我们的ExcelReaderBuilder对象

我们ExcelReaderBuilder对象.sheet()后,我们就能进行很多的操作

例如doRead(),doWrite,doFill()等等

监听器

我们读取的时候可以创造一个监听器

监听器继承了我们的AnalysisEventListener<监听实体>类

我们有一个invoke和adAfterAllAnalysed方法

一个是每一次读取都会调用的方法

一个是全部读取完我们才调用的方法


实现文件的上传和下载

上传

也就是正常的文件上传

我们和之前一样用doRead()来进行读取

下载

我们的Controller的参数是HttpServletResponse类

和之前一样用doWrite()来进行写入

这样子我们调用Controller的时候,他就是自动帮我们下载一个文件,文件里面就是我们的输出的内容


填充案例

填充一组数据

生成模版

我们读取原来的文件,然后后面基于这个文件作为模版,来生成工作薄对象

实体类进行填充

使用map数据来进行填充


填充多组数据


组合填充数据

FillConfig

我们主要看这个FillConfig类,相当于在这里填写我们fill时候的配置,然后我们操作就行了

水平填充

和组合填充的在于FillConfig的构建不同


常见的API和注解

常见类

  • EasyExcel 入口类,用于构建开始各种操作;
  • ExcelReaderBuilder 构建出一个ReadWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
  • ExcelWriterBuilder 构建出一个WriteWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
  • ExcelReaderSheetBuilder 构建出一个ReadSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
  • ExcelWriterSheetBuilder 构建出一WriteSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
  • ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据,我们可以把调用service的代码可以写在其invoke方法内部;
  • WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据,对使用者透明不可见;
  • 所有配置都是继承的 Workbook的配置会被Sheet继承。所以在用EasyExcel设置参数的时候,在EasyExcel...sheet()方法之前作用域是整个sheet,之后针对单个sheet。

读取时的注解

@ExcelProperty

效果:index属性可以指定当前字段对应excel中的哪一列,可以根据列名value去匹配,也可以不写

如果不使用@ExcelProperty注解,成员变量从上到下的顺序,对应表格中从左到右的顺序

@ExcelIgnore

加了这个注解就会忽略这个字段

@DateTimeFormat

标注在成员变量上,日期转换,代码中用String类型的成员变量****去接收 excel中日期格式的数据会调用这个注解

@NumberFormat

标注在成员变量上,数字转换,代码中用String类型的成员变量****去接收 excel数字格式的数据会调用这个注解

@ExcelIgnoreUnannotated

标注在类上。

不标注该注解时,默认类中所有成员变量都会参与读写,无论是否在成员变量上加了@ExcelProperty 的注解。

标注该注解后,类中的成员变量如果没有标注 @ExcelProperty****注解将 不会参与读写


写入时注解

@ExcelProperty

index 指定写到第几列,如果不指定则根据成员变量 位置 排序;

value指定写入的列头,如果不指定则使用成员变量的 名字 作为列头;

如果要设置复杂的头,可以为value指定多个值


其他注解

  • @ContentRowHeight() 标注在类上或属性上,指定内容行高
  • @HeadRowHeight() 标注在类上或属性上,指定列头行高
  • @ColumnWidth() 标注在类上或属性上,指定列宽
  • ExcelIgnore` 默认所有字段都会写入excel,这个注解会忽略这个字段
  • DateTimeFormat 日期转换,将Date写到excel会调用这个注解。里面的value参照java.text.SimpleDateFormat
  • NumberFormat 数字转换,用Number写excel会调用这个注解。里面的value参照java.text.DecimalFormat
  • ExcelIgnoreUnannotated 默认不加 ExcelProperty 的注解的都会参与读写,加了不会参与

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm