简单几个注解,分分钟搞定 Excel 数据导出

如题所述

数据导出是日常开发的常见功能,及将数据导出为Excel并提供下载。 Java 生态存在大量的 Excel 操作类库,基于这些类库便可完成相关功能。这样,大量繁杂、无意义的代码耗费着宝贵的人力资源,大家距离 996 又近了几分,那有没有更优解呢?

1.1. 背景

刚刚接到产品需求,准备为众多“列表”功能增加下载支持,简单来说就是:新增一个“导出”按钮,点击时,将列表数据导入到 Excel 并进行下载。

需求很简单,功能也很明确,接到需求后,小伙伴们着手准备:

不知道你怎么想,面对这些枯燥的体力工作,我极为反感。

1.2. 目标

“懒” 是人类进步的“原动力”。手懒心不懒,让脑力解放体力!!!

设计目标如下:

为特殊场景提供定制能力,以满足个性化需求;

2. 快速入门

2.1. 引入 starter 以及相关依赖

首先,在 pom 文件中增加excelasbean starter 以及 poi 依赖。

2.2. 使用 ExcelAsBeanService 完成 excel 导出

其次,将ExcelAsBeanService 注入到自己的 Sevice 中,使用 write 等一系列方法完成 数据写入。

示例代码如下:

2.3. 在 JavaBean 上增加相关注解

最后,只要在 JavaBean 增加相关注解,便可以导出 Excel。

从简单到复杂,框架提供了多种定制能力,具体如下:

2.3.1. 简单导出

最简单的方式,只需增加@HSSFHeader 注解,并指定好 Header 的标题即可。

示例代码如下:

运行效果如下:

备注:@HSSFHeader 具有标记作用,JavaBean 中没有 @HSSFHeader 标记的字段或方法不会进行导出。

2.3.2. 自定义列顺序

默认情况下,Excel 中的列与 JavaBean 属性定义顺序相关;如有需要,可自定义列的顺序。

增加自定义列顺序,相关代码如下:

可以通过@HSSFHeader 的 order 指定顺序,也可以使用 @HSSFShowOrder 进行指定,具体效果如下:

见图,年龄 和 生日 的顺序发生变化。

2.3.3. 导出嵌入对象

当 JavaBean 属性为另一个对象时,我们需要将关联对象也一并导出。

首先,定义关联对象,示例如下:

关联对象只是在 Address 上增加了@HSSFHeader 注解。

其次,使用@HSSFEmbedded 对嵌入对象进行标记。示例如下:

运行效果如下:

如图,Address 内部属性已经完全展开并写入到 Excel。

2.3.4. 自定义格式化方法

当直接对属性进行展示不能满足需求时,可以通过自定义方法对输出内容进行格式化。

比如,需要对 Address 对象中的内容进行自定义展示,示例如下:

首先,将展示规则封装到方法中,如showAddress()然后,在方法上增加 @HSSFHeader 注解。

运行效果如下:

如图,Excel 中新增 “详细地址” 列。

2.3.5. 添加样式

如果觉得展示比较枯燥,可以自定义 Header 和 Data 的显示样式。

在类上指定全局 Header 样式,示例如下:

在 UserV5 类上增加@HSSFHeaderStyle("header"),指定表头使用 header 样式。

运行效果如下:

如图,表头的样式发生了变化。

备注:自定义样式,需要提供HSSFCellStyleFactory 实现,详见 “设计&扩展” 部分

3. 设计&扩展

3.1. 核心设计

3.1.1. 整体设计

整体设计如下:

按照层级结构,将核心组件拆分为:

其中,操作的核心逻辑基本在HSSFCellWriterChain 中,其他结构主要完成组件组装。

3.1.1. CellWriterChain 设计

CellWriterChain 是写入流程的核心,整体设计如下:

从写流程来看,包括:

从装配流程来看,包括:

3.2. 功能扩展

为了应对个性化需求,框架提供了众多扩展点,其中最重要的扩展点包括,HSSFValueSupplier、HSSFCellWriter 和 HSSFCellConfigurator。

三者协助组成HSSFCellWriterChain,完成数据写入操作。

3.2.1. HSSFValueSupplier

从 Bean 中提取数据。

HSSFValueSupplier 定义如下:

直接继承自 Function,输入为 JavaBean 对象,输出为待写入数据。

目前,系统实现如下:

备注:一般情况下无需进行扩展

3.2.2. HSSFCellConfigurator

在执行写入操作前,对 Cell 进行配置。

HSSFCellConfigurator 定义如下:

目前,系统中实现包括:

如需对样式进行定制,需实现HSSFCellStyleFactory 并根据 name 返回不同的样式。实例代码如下:

3.2.3. HSSFCellWriter

负责向 Cell 中写入数据,比如对数据进行格式化。

HSSFCellWriter 接口定义如下:

目前,系统中的实现包括:

备注:如需复杂的转换,可以通过扩展HSSFCellWriter 的方式实现。

4. 项目信息

项目仓库地址:

gitee.com/litao851025/l...

项目文档地址:

gitee.com/litao851025/l...数据导出 来源:geekhalo
温馨提示:内容为网友见解,仅供参考
无其他回答

简单几个注解,分分钟搞定 Excel 数据导出
最简单的方式,只需增加@HSSFHeader 注解,并指定好 Header 的标题即可。示例代码如下:运行效果如下:备注:@HSSFHeader 具有标记作用,JavaBean 中没有 @HSSFHeader 标记的字段或方法不会进行导出。2.3.2. 自定义列顺序 默认情况下,Excel 中的列与 JavaBean 属性定义顺序相关;如有需要,可自定义列的...

分分钟搞定 Excel 数据导出
首先,从pom文件中引入依赖,然后在Service中注入ExcelAsBeanService,使用其write方法即可完成数据写入。ExcelAsBeanService提供了多种定制选项,如简单导出只需添加@HSSFHeader注解,自定义列顺序,导出嵌入对象,格式化方法,以及添加样式等。以简单导出为例,只需在JavaBean上指定Header标题,框架会自动处理其余...

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了
EasyPoi是SpringBoot环境下的一款工具,可以定义导出数据对象,通过添加注解实现Excel导入导出功能。它不是替代POI,而是让不熟悉导入导出的人也能快速使用POI完成Excel操作。在SpringBoot中集成EasyPoi简单,只需添加一个依赖即可。接下来,以会员信息和订单信息为例,展示EasyPoi的简单导出和复杂导出功能。以会员...

一文带你彻底玩转EasyExcel:导入导出excel数据起飞
EasyExcel的注解如@ExcelProperty和@ExcelIgnore提供了灵活的控制,@ExcelProperty用于指定属性与Excel列的映射,而@ExcelIgnore则允许忽略某些属性。在数据导出时,使用@ExcelProperty(value = "姓名")可以方便地定制表头,符合常规需求。EasyExcel与Apache POI的对比显示,前者在易用性和性能上更胜一筹,适合...

一文搞定POI,再也不怕excel导入导出了
EasyPoi提供了注解式的使用方法,如@ExcelTarget、@Excel、@ExcelEntity和@ExcelCollection,极大地简化了导入导出操作。例如,@ExcelEntity用于映射嵌套实体,@ExcelCollection则用于处理一对多关系的数据。本文未详述的具体操作,如数据填充、导入处理和复杂表头写入,都可通过官方文档获取详细步骤和示例。如果需要...

【Java导入导出系列】简单介绍一下EasyExcel的用法
2. 数据导出若要导出数据列表,首先获取查询结果,然后调用如下方法:参数:List数据(data)、对应的类(clazz)、输出流(outputStream)、页码(sheetNo)、页名称(sheetName)和WriteHandler。结果示例见上,但需要注意调整标题格式和字段处理。3. 格式调整标题:使用@ExcelProperty注解指定显示名称。字段...

Spring Boot + EasyExcel导入导出,简直太好用了!
在Controller层的实现一个简单的导出实现:这个实现方式非常简单直接,使用EasyExcel的write方法将查询到的数据进行处理,以流的形式写出即可。在浏览器访问对应的链接,可下载到如下Excel内容:如果我们需要将导出的Excel进行一些格式化的处理,这就需要用到导出策略的实现了。在EasyExcel执行write方法之后,获得...

Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!_百 ...
@ExcelIgnore用于忽略指定字段,@DateTimeFormat与@NumberFormat分别用于日期和数字的格式转换,而@ExcelIgnoreUnannotated注解则用于控制不加ExcelProperty注解的字段是否参与读写。EasyExcel在Spring Boot项目中的集成与使用相对简单,具体步骤包括引入依赖、监听事件、设计接口进行Excel导入导出操作。接口可以接收Http...

Excel怎么新建注解Excel新建注解怎么操作
在用Excel制作表格时,会遇到给一些表格数据添加备注的信息,给输入的文字添加注解的情况,下面就来介绍一下方法。Excel怎么新建注解 以office2010为例 首先打开一篇Excel表格,点击菜单栏中的审阅 找到注释,点击注释下的三角形 在弹出的下拉框中点击新建注释就完成了 看完上面Excel新建注解的方法后是不是...

SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出
首先,引入EasyExcel的依赖,以用户信息导出为例,开始构建导出功能。创建一个UserDO实体类,包含@Excel注解来映射Excel列。如果需要枚举类型转换,自定义Converter接口,如GenderConverter,来处理性别字段。接着,编写接口并通过Postman或Apifox测试导出接口,注意下载时需要点击下载图标。对于复杂导出,如一对多...

相似回答
大家正在搜