项目的 ykkj-spring-boot-starter-excel技术组件,基于 EasyExcel 实现 Excel 的读写操作,可用于实现最常见的 Excel 导入导出等功能。
EasyExcel 的介绍?
EasyExcel 是阿里开源的 Excel 工具库,具有简单易用、低内存、高性能的特点。
在尽可用节约内存的情况下,支持百万行的 Excel 读写操作。例如说,仅使用 64M 内存,20 秒完成 75M(46 万行 25 列)Excel 的读取。并且,还有极速模式能更快,但是内存占用会在100M 多一点。
1. Excel 导出
以 [系统管理 -> 岗位管理] 菜单为例子,讲解它 Excel 导出的实现。
1.1 后端导出实现
在 module/system/controller/admin/dept/PostController.java类中,定义 /admin-api/system/post/export 导出接口。代码如下:
- ① 将从数据库中查询出来的列表,转换成对应的 PostExcelVO 列表。
② 将 PostExcelVO 列表,转换成 Excel 文件,返回给前端。
1.1.1 PostExcelVO 类
创建 module/system/controller/admin/dept/vo/post/PostExcelVO.java类,岗位 Excel 导出的 VO 类。它有两个作用,代码如下:

① 每个字段上的 @ExcelProperty注解,声明 Excel Head 头部的名字。
② 每个字段的值,就是它对应的 Excel Row 行的数据值。
因此,最终 Excel 导出的效果如下:
另外,在上述代码的红线部分,@ExcelProperty 注解的 converter 属性是 DictConvert 转换器,通过它将 status = 1 转换成“开启”列,status = 0 转换成”禁用”列。稍后,我们会在 「3. 字段转换器」 小节来详细讲讲。1.1.2 ExcelUtils 写入
ExcelUtils 的 framework/excel/core/util/ExcelUtils.java方法,将列表以 Excel 响应给前端。代码如下图:
1.2 前端导出实现
在 post/index.vue界面,定义 #handleExport() 操作,代码如下图:
2. Excel 导入
以 [系统管理 -> 用户管理] 菜单为例子,讲解它 Excel 导入的实现。
2.1 后端导入实现
在 module/system/controller/admin/user/UserController.java类中,定义 /admin-api/system/user/import 导入接口。代码如下:

将前端上传的 Excel 文件,读取成 UserImportExcelVO 列表。2.1.1 UserImportExcelVO 类
创建 module/system/controller/admin/dept/vo/post/PostExcelVO.java类,用户 Excel 导入的 VO 类。它的作用和 Excel 导入是一样的,代码如下:

对应使用的 Excel 导入文件如下:
2.1.2 ExcelUtils 读取
ExcelUtils 的 framework/excel/core/util/ExcelUtils.java#read(…)方法,读取 Excel 文件成列表。代码如下图:
2.2 前端导入实现
在 user/index.vue界面,定义 Excel 导入的功能,代码如下图:
3. 字段转换器
EasyExcel 定义了 Converter接口,用于实现字段的转换。它有两个核心方法:
① #convertToJavaData(…) 方法:将 Excel Row 对应表格的值,转换成 Java 内存中的值。例如说,Excel 的“状态”列,将“状态”列转换成 status = 1,”禁用”列转换成 status = 0。
② #convertToExcelData(…) 方法:恰好相反,将 Java 内存中的值,转换成 Excel Row 对应表格的值。例如说,Excel 的“状态”列,将 status = 1 转换成“开启”列,status = 0 转换成”禁用”列。3.1 DictConvert 实现
以项目中提供的 /framework/excel/core/convert/DictConvert.java举例子,它实现 Converter 接口,提供字典数据的转换。代码如下:

实现的代码比较简单,自己看看就可以明白。3.2 DictConvert 使用示例
在需要转换的字段上,声明注解 @ExcelProperty 的 converter 属性是 DictConvert 转换器,注解 framework/excel/core/annotations/DictFormat.java@DictFormat为对应的字典数据的类型。示例如下:
4. 更多 EasyExcel 注解
基于 《EasyExcel 中的注解 》文章,整理相关注解。
4.1 @ExcelProperty
这是最常用的一个注解,注解中有三个参数 value、index、converter 分别代表列明、列序号、数据转换方式。value 和 index 只能二选一,通常不用设置 converter。
最佳实践 ```java public class ImeiEncrypt {@ExcelProperty(value = “imei”) private String imei; }
<a name="OTafV"></a>### 4.2 @ColumnWith用于设置列宽度的注解,注解中只有一个参数 value。value 的单位是字符长度,最大可以设置 255 个字符,因为一个 Excel 单元格最大可以写入的字符个数,就是 255 个字符。<br />**最佳实践**```javapublic class ImeiEncrypt {@ColumnWidth(value = 18)private String imei;}
4.3 @ContentFontStyle
用于设置单元格内容字体格式的注解。参数如下:
| 参数 | 含义 |
|---|---|
| fontName | 字体名称 |
| fontHeightInPoints | 字体高度 |
| italic | 是否斜体 |
| strikeout | 是否设置删除水平线 |
| color | 字体颜色 |
| typeOffset | 偏移量 |
| underline | 下划线 |
| bold | 是否加粗 |
| charset | 编码格式 |
4.4 @ContentLoopMerge
用于设置合并单元格的注解。参数如下:
| 参数 | 含义 |
|---|---|
| eachRow | |
| columnExtend |
4.5 @ContentRowHeight
用于设置行高。参数如下:
| 参数 | 含义 |
|---|---|
| value | 行高,-1代表自动行高 |
4.6 @ContentStyle
设置内容格式注解。参数如下:
| 参数 | 含义 |
|---|---|
| dataFormat | 日期格式 |
| hidden | 设置单元格使用此样式隐藏 |
| locked | 设置单元格使用此样式锁定 |
| quotePrefix | 在单元格前面增加`符号,数字或公式将以字符串形式展示 |
| horizontalAlignment | 设置是否水平居中 |
| wrapped | 设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见 |
| verticalAlignment | 设置是否垂直居中 |
| rotation | 设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°~90°,07版本的Excel旋转角度区间为0°~180° |
| indent | 设置单元格中缩进文本的空格数 |
| borderLeft | 设置左边框的样式 |
| borderRight | 设置右边框样式 |
| borderTop | 设置上边框样式 |
| borderBottom | 设置下边框样式 |
| leftBorderColor | 设置左边框颜色 |
| rightBorderColor | 设置右边框颜色 |
| topBorderColor | 设置上边框颜色 |
| bottomBorderColor | 设置下边框颜色 |
| fillPatternType | 设置填充类型 |
| fillBackgroundColor | 设置背景色 |
| fillForegroundColor | 设置前景色 |
| shrinkToFit | 设置自动单元格自动大小 |
4.7 @HeadFontStyle
用于定制标题字体格式。参数如下:
| 参数 | 含义 |
|---|---|
| fontName | 设置字体名称 |
| fontHeightInPoints | 设置字体高度 |
| italic | 设置字体是否斜体 |
| strikeout | 是否设置删除线 |
| color | 设置字体颜色 |
| typeOffset | 设置偏移量 |
| underline | 设置下划线 |
| charset | 设置字体编码 |
| bold | 设置字体是否家畜 |
4.8 @HeadRowHeight
设置标题行行高。参数如下:
| 参数 | 含义 |
|---|---|
| value | 设置行高,-1代表自动行高 |
4.9 @HeadStyle
设置标题样式。参数如下:
| 参数 | 含义 |
|---|---|
| dataFormat | 日期格式 |
| hidden | 设置单元格使用此样式隐藏 |
| locked | 设置单元格使用此样式锁定 |
| quotePrefix | 在单元格前面增加`符号,数字或公式将以字符串形式展示 |
| horizontalAlignment | 设置是否水平居中 |
| wrapped | 设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见 |
| verticalAlignment | 设置是否垂直居中 |
| rotation | 设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°~90°,07版本的Excel旋转角度区间为0°~180° |
| indent | 设置单元格中缩进文本的空格数 |
| borderLeft | 设置左边框的样式 |
| borderRight | 设置右边框样式 |
| borderTop | 设置上边框样式 |
| borderBottom | 设置下边框样式 |
| leftBorderColor | 设置左边框颜色 |
| rightBorderColor | 设置右边框颜色 |
| topBorderColor | 设置上边框颜色 |
| bottomBorderColor | 设置下边框颜色 |
| fillPatternType | 设置填充类型 |
| fillBackgroundColor | 设置背景色 |
| fillForegroundColor | 设置前景色 |
| shrinkToFit | 设置自动单元格自动大小 |
4.10 @ExcelIgnore
4.11 @ExcelIgnoreUnannotated
没有注解的字段都不转换
