【EasyExcel】在SpringBoot+VUE项目中引入EasyExcel实现对数据的导出(封装工具类)
在SpringBoot+VUE项目中引入EasyExcel实现导入导出
一、引入EasyExcel
通过maven引入,坐标如下:
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel-core</artifactId><version>3.3.2</version></dependency>
二、后端代码演示
下面以权限系统中的角色列表为案例,演示如何导出数据
实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import lombok.Data;import java.time.LocalDateTime;/*** 角色excel** @author ez4sterben* @date 2023/07/17*/
@ContentRowHeight(30)
@HeadRowHeight(20)
@ColumnWidth(25)
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
@Data
public class RoleExcelVO {/*** 角色名称*/@ExcelProperty(value = "角色名称")private String roleName;/*** 权限字符*/@ExcelProperty(value = "权限字符")private String permission;/*** 角色状态(0停用,1正常)*/@ExcelProperty(value = "角色状态")private String status;/*** 备注*/@ExcelProperty(value = "备注")private String remark;/*** 创建时间*/@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")@ExcelProperty(value = "创建时间")private LocalDateTime createTime;}
工具类
通过@Component把工具类交给spring管理,在需要使用的地方使用@Resource注入即可
将泛型设置为 " ? ",来表示任意类型,可以通过这一个方法完成所有类的相似导出操作,如果要投入使用的话可以对arrayList和excelVO的类型是否相同进行判断,这里没有进行判断。
EasyExcel工具类
import com.alibaba.excel.EasyExcel;
import org.springframework.stereotype.Component;import java.util.ArrayList;/*** 简单excel工具类** @author ez4sterben* @date 2023/07/17*/
@Component
public class EasyExcelUtil {public static final String XLSX = ".xlsx";public String export(ArrayList<?> arrayList, Class<?> excelVO, String sheetName) {String fileName = System.currentTimeMillis() + XLSX;EasyExcel.write(fileName, excelVO).sheet(sheetName).doWrite(arrayList);return fileName;}
}
Excel输出工具类
如果你使用的是微服务架构建议考虑该工具类的位置不要和基本模块放在一起,而是和Controller放在同一个模块,下面的常量定义大可不必这么做,但个人认为代码规范还是很重要的。另外输出流的部分代码还可以改进,欢迎提出建议。
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;/*** 基础excel输出工具** @author ez4sterben* @date 2023/07/18*/
public class BaseExcelOutPutUtil {public static FileInputStream FILE_INPUT_STREAM;public static ServletOutputStream SERVLET_OUTPUT_STREAM;public static final String EXCEL = "application/vnd.ms-excel";public static final String CONTENT_DISPOSITION = "Content-Disposition";public static final String ATTACHMENT = "attachment;";public static final Integer SUCCESS_CODE = 200;public static void exportExcel(HttpServletResponse response, String filePath) throws IOException {try {FILE_INPUT_STREAM = new FileInputStream(filePath);SERVLET_OUTPUT_STREAM = response.getOutputStream();response.setContentType(EXCEL);response.setHeader(CONTENT_DISPOSITION, ATTACHMENT);response.setStatus(SUCCESS_CODE);int len = 0;byte[] bytes = new byte[1024];while ((len = FILE_INPUT_STREAM.read(bytes)) > 0) {SERVLET_OUTPUT_STREAM.write(bytes, 0, len);}SERVLET_OUTPUT_STREAM.flush();} catch (Exception e) {e.printStackTrace();}finally {// 关闭流SERVLET_OUTPUT_STREAM.close();FILE_INPUT_STREAM.close();new File(filePath).delete();}}}
业务层
@Resourceprivate EasyExcelUtil easyExcelUtil;public static final String SHEET_NAME = "角色表";/*** 导出** @param ids id* @return {@link String}* @throws IOException ioexception*/@Overridepublic String export(List<Long> ids) throws IOException {// 前端传参ids,查询数据List<RolePO> rolePOS = this.listByIds(ids);ArrayList<RoleExcelVO> roleExcelVOS = new ArrayList<>();rolePOS.forEach(rolePO -> {// 通过hutool的BeanUtils把内容抄送给roleExcelVORoleExcelVO roleExcelVO = new RoleExcelVO();BeanUtils.copyProperties(rolePO,roleExcelVO);roleExcelVOS.add(roleExcelVO);});return easyExcelUtil.export(roleExcelVOS,RoleExcelVO.class,SHEET_NAME);}
由于我们刚才已经封装过工具类,那么这里不限于角色表的导出,还可以是其他的任何表,比如我要导出用户表,那么我只需要扒这部分代码写入用户的业务层就可以
Controller层
/*** 导出** @return {@link Result}<{@link List}<{@link BusinessVO}>>*/@PostMapping("/export")public void export(@RequestBody List<Long> ids, HttpServletResponse response) {String filePath;try {filePath = roleService.export(response,ids);BaseExcelOutPutUtil.exportExcel(response,filePath);} catch (IOException e) {throw new RuntimeException(e);}}
到此为止后端的代码就展示完毕,其实还可以把导出统一封装在一起,但是目前对于我这个小项目完全是够用了,已经可以省去我很多内容了,读者有兴趣可以自行封装。下面会给各位展示前端代码。
前端VUE调用
// 导出handleExport() {axios({method: "post",data: this.selectedRoles, // 这里写ids []url: this.urls.export, // 这里写你自己的后端urlresponseType: "blob"}).then((res) => {const blob = new Blob([res.data]);const a = document.createElement("a");const href = window.URL.createObjectURL(blob);a.href = href;a.download = '角色表权限.xlsx';document.body.appendChild(a);a.click();document.body.removeChild(a);window.URL.revokeObjectURL(href);}).catch((error) => {});},
下载通过blob实现,博主前端写的不规范,请自行更改。
data和url和你自己的后端对应上即可。
结果展示
【EasyExcel】在SpringBoot+VUE项目中引入EasyExcel实现对数据的导出(封装工具类)相关推荐
- vue ajax highcharts,在vue项目中引入highcharts图表的方法(详解)
npm进行highchars的导入,导入完成后就可以进行highchars的可视化组件开发了 npm install highcharts --save 1.components目录下新建一个char ...
- 如何在Vue项目中引入ArcGIS JavaScript API 创建三维可视化地图(含vue项目创建教程)
新手上路之在Vue项目中引入ArcGIS API 视频教程 B站搜索 X北辰北,感谢up主无私的教学~ B站地址:https://www.bilibili.com/video/BV18E411K7B ...
- VUE 项目中引入外部js文件(CND引入)
以VUE项目中引入echarts文件为例: 第一步在VUE项目中找到index.html文件 引入 :<script src="https://cdnjs.cloudflare.com ...
- 如何在vue项目中引入html页面
在vue项目中引入html页面的两种方法 第一种:/static/page.html 第二种:通过iframe嵌入 第一种:/static/page.html 在static或public文件夹下,新 ...
- vue项目中引入bootstrap的方法
vue项目中引入bootstrap?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 相关教程推荐:<bootstrap教程> 在 vue 项目 ...
- SpringBoot+Vue项目中实现登录验证码校验
SpringBoot+Vue项目中实现登录验证码校验 在各大项目中,为保证数据的安全性,通常在登录页面加入验证码校验,以防止爬虫带来的数据泄露危机.本文将介绍在前后端分离的项目中,怎样实现图形验证码校 ...
- vue项目中解决浏览器刷新vuex数据消失问题
vue项目中解决浏览器刷新vuex数据消失问题 说明 vuex中的数据经过浏览器刷新后会消失,所以应设置在浏览器刷新之前将数据存入浏览器或者cookie中. 操作 打开App.vue,在created ...
- vue项目中引入字体包
问题: 项目开发过程中,因UI的显示要求,需要引入一些字体,那如何引入外部字体呢?很简单,只需要以下3步 一 下载对应的字体包文件,放置到我们的项目中 比如我需要PingFangSC的系列字体,我 ...
- vue项目中引入monaco editor
monaco-editor概述 monaco-editor 是微软开源的一款web代码编辑器,vscode就是集成monaco-editor来实现的. 官方示例 官方文档 使用 安装 npm安装 np ...
最新文章
- Ignite的jdbc与网格的连接方式的查询性能对比
- gogs只支持mysql5.7_Gogs 搭建教程
- 【Scratch】青少年蓝桥杯_每日一题_3.07_画金字塔
- java程序设计颜志军_JSP 自定义标签之一 简单实例
- WinForm与脚本的交互
- 关于ant的使用和入门知识
- python jupyter notebook 上传文件_使用jupyter notebook将文件保存为Markdown,HTML等文件格式...
- canvas设置字体粗细用数字没效果_干货 | 用uni-app制作迷你PS小程序
- 运用python》pyautogui自动刷智慧树网课的脚本
- 社团管理系统软件测试,软件测试大作业社团管理系统.doc
- 几款好用的串口和网络调试助手
- 目前在题库管理和试卷生成方面最好用的共享软件(已更新)
- 爬虫项目1[爬取小猪短租数据]
- 物联网专业有哪些含金量高的比赛?
- msfvenom手册
- c程序语言中long,C语言long
- 遇到黑客攻击遭遇勒索保护费怎么办?黑客最常见的攻击手段
- [ZZ]浅谈中国B2C珍珑棋局
- Reliable Cloud Infrastructure: Design and Process学习笔记
- iOS11下UITableView侧滑删除详解