common-excel 模块基于 Easyexcel 实现 Excel 的读写。

EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel。 64M 内存 1 分钟内读取 75M(46W 行 25 列)的 Excel,当然还有急速模式能更快,但是内存占用会在 100M 多一点

Excel 导入导出功能使用 - 图1

引入依赖

  1. <dependency>
  2. <groupId>com.pig4cloud.excel</groupId>
  3. <artifactId>excel-spring-boot-starter</artifactId>
  4. </dependency>

定义导入导出实体

  1. public class UserExcelVO {
  2. @ExcelProperty("用户编号")
  3. private Integer userId;
  4. @NotBlank(message = "用户名不能为空")
  5. @ExcelProperty("用户名")
  6. private String username;
  7. }

导出

点击查看【bilibili】

后端代码

  • Controller 接口直接返回 List 元素即可,这里特别注意的时 接口上需要声明 @ResponseExcel 注解
  1. @ResponseExcel
  2. @GetMapping("/export")
  3. public List<UserExcelVO> export(UserDTO userDTO) {
  4. return userService.listUser(userDTO);
  5. }

前端页面

  • 定义 menuLeft 的卡槽
  1. <template slot="menuLeft">
  2. <el-button
  3. class="filter-item"
  4. plain
  5. type="primary"
  6. size="small"
  7. icon="el-icon-download"
  8. @click="exportExcel">导出</el-button>
  9. </template>
  • 具体的导出事件定义 downBlobFile 已经定义成全局方法,可以直接引用
  1. exportExcel() {
  2. this.downBlobFile("/admin/user/export", this.searchForm, "user.xlsx");
  3. }
  • downBlobFile 方法参数说明 | 参数 | 示例 | 描述 | | —- | —- | —- | | url | /admin/user/export | 请求后端的接口地址 | | params | this.searchForm | 查询参数 | | filename | user.xls | 下载后显示的文件名称 |

导入

点击查看【bilibili】

后端代码

  • Controller 接口使用 @RequestExcel 标记前端 excel 对应的实体列表, BindingResult 用来校验 实体 jsr303 校验失败结果
  1. @PostMapping("/import")
  2. public R importUser(@RequestExcel List<UserExcelVO> excelVOList, BindingResult bindingResult) {
  3. return userService.importUser(excelVOList, bindingResult);
  4. }
  • 获取校验结果 ,把不合法数据返回前端回显原因。 其中包括两种不合法(JSR303 不合法数据、自己个性化校验的
  1. List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
  • JSR 303 通用校验结果

Excel 导入导出功能使用 - 图2

  • 个性化校验 通用校验结果

Excel 导入导出功能使用 - 图3

  1. if (CollUtil.isNotEmpty(errorMessageList)) {
  2. return R.failed(errorMessageList);
  3. }

前端页面

  • 定义 menuLeft 的卡槽
  1. <template slot="menuLeft">
  2. <el-button
  3. class="filter-item"
  4. plain
  5. type="primary"
  6. size="small"
  7. icon="el-icon-upload"
  8. @click="$refs.excelUpload.show()"
  9. >导入
  10. </el-button>
  11. </template>
  • 引入组件 ExcelUpload
  1. import ExcelUpload from "@/components/upload/excel";
  2. <!--excel 模板导入 -->
  3. <excel-upload
  4. ref="excelUpload"
  5. title="用户信息导入"
  6. url="/admin/user/import"
  7. temp-url="/admin/sys-file/local/user.xlsx"
  8. @refreshDataList="refreshChange"
  9. ></excel-upload>
  • excel-upload 组件参数说明 | 参数 | 示例 | 描述 | | —- | —- | —- | | ref | excelUpload | 固定值和上文导入按钮的 ref 绑定值保持一致,不需要修改 | | title | 用户信息导入 | 弹出框标题 | | url | /admin/user/import | 后台接口地址 | | temp-url | /admin/sys-file/excel-temp/user.xlsx | 导入模板下载地址 都是通过此接口下载,模板放在 upms 模块 |

Excel 导入导出功能使用 - 图4

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif