easyExcel使用案例有代码
easyExcel 入门,完成web的excel文件创建和导出
easyExcel官网

EasyExcel 的主要特点如下:
1、高性能:EasyExcel 采用了异步导入导出的方式,并且底层使用 NIO 技术实现,使得其在导入导出大数据量时的性能非常高效。
2、易于使用:EasyExcel 提供了简单易用的 API,用户可以通过少量的代码即可实现复杂的 Excel 导入导出操作。
3、增强的功能“EasyExcel 支持多种格式的 Excel 文件导入导出,同时还提供了诸如合并单元格、数据校验、自定义样式等增强的功能。
4、可扩展性好:EasyExcel 具有良好的扩展性,用户可以通过自定义 Converter 对自定义类型进行转换,或者通过继承 EasyExcelListener 来自定义监听器实现更加灵活的需求。
入门使用
使用maven导入easyExcel坐标
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version>
</dependency>
定义实体类封装数据,一行对应一个对象 用@ExcelProperty注解完成与excel的映射
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CategoryExcelVo {// `value` 指定 Excel 表头名称,数据导入导出时匹配该表头// `index`(可选)从 0 开始,表示 Excel 第 n+1 列// 如果省略 `index`,则按字段声明顺序匹配列@ExcelProperty(value = "id" ,index = 0)private Long id;@ExcelProperty(value = "名称" ,index = 1)private String name;
}
excel对应的表

读入操作 read 读需要用到ExcelListener对象
1、 先创建这个对象
@Getter
public class ExcelListener<T> extends AnalysisEventListener<T> {/*** 每读取一行就执行一次* @param t 返回的数据* @param analysisContext*///读取后对象存储在data集合中List<T> data=new ArrayList<>();@Overridepublic void invoke(T t, AnalysisContext analysisContext) {data.add(t);}/*** 都读取解析完毕后执行, 一般用于对资源的处理, 或对操作的补充* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("表格的解析完成了");}
2、 进行读测试
private static void readFile() {// 文件的路径String filePath="/Users/chen/01.xlsx";// easyExcel不能由spring 接管, 这里手动new对象ExcelListener<CategoryExcelVo> excelVoExcelListener = new ExcelListener<>();//读操作EasyExcel.read(filePath, CategoryExcelVo.class,excelVoExcelListener).sheet().doRead();//读取完毕后数据存放到了, 监听器的data里面,遍历取出来就可以List<CategoryExcelVo> data = excelVoExcelListener.getData();for (CategoryExcelVo item : data) {System.out.println(item);}}
写出操作 write 不需要用到ExcelListener对象
private static void writeFile() {//要写到的磁盘路径String filePath="/Users/chen/categoryWrite.xlsx";//创建每一个对象,对应一行数据List<CategoryExcelVo> list = new ArrayList<>() ;list.add(new CategoryExcelVo(1L , "数码办公")) ;list.add(new CategoryExcelVo(11L , "华为手机")) ;//参数 1路径名 2 对应的类 3 excel中sheet的名字 4 集合EasyExcel.write(filePath,CategoryExcelVo.class).sheet("category").doWrite(list);System.out.println("finished write");}
在web中使用
后端
1、controller
@RestController
@RequestMapping("/admin/product/category")
public class CategoryController {@Autowiredprivate CategoryService categoryService;@GetMapping("/excelExport")//不需要返回值, 由response设置public void excelExport(HttpServletResponse response){categoryService.excelExport(response);}
}
2、service
@Service
@Transactional
public class CategoryServiceImpl implements CategoryService {@Autowiredprivate CategoryMapper categoryMapper;/*** 导出 excel文件,写操作* @param response*/@Overridepublic void excelExport(HttpServletResponse response) {try {// 设置mime类型response.setContentType("application/vnd.ms-excel");//设置浏览器编码方法response.setCharacterEncoding("utf-8");//对路径进行编码String fileName = URLEncoder.encode("分类数据", "UTF-8");//设置 HTTP 响应头,告诉浏览器该请求是一个文件下载(attachment),并指定下载的文件名为 fileName.xlsx。response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");//准备数据//查询全部分类,不需要带树形结构List<Category> categoryList=categoryMapper.selectAllCategory();//查出来的数据比实际用到的数据多// 查询出来的类和对应的vo类不匹配, 但是有部分属性相同,这时候可以用map()函数List<CategoryExcelVo> categoryExcelVoList = categoryList.stream().map(category -> {CategoryExcelVo categoryExcelVo = new CategoryExcelVo();// BeanUtils.copyProperties(); 可以把参数一的属性的值,拷贝到参数2中, 要求两个属性必须一致BeanUtils.copyProperties(category, categoryExcelVo);return categoryExcelVo;}).collect(Collectors.toList());//写出数据EasyExcel.write(response.getOutputStream(), CategoryExcelVo.class).sheet("category").doWrite(categoryExcelVoList);} catch (Exception e) {e.printStackTrace();}}
}
3、mapper
@Mapper
public interface CategoryMapper {//查询所有分类List<Category> selectAllCategory();}
<select id="selectAllCategory" resultType="com.chen.model.entity.product.Category">select <include refid="columns"/> from categorywhere is_deleted=0order by order_num</select>
前端
1、 api
import request from '@/utils/request'
// 抽取出来方便后面使用
const apiUrl = '/admin/product/category'/*** 导出excel文件* @returns {AxiosPromise}*/
export const exportExcel = () => {return request({url: `${apiUrl}/excelExport`,method: 'get',responseType:'blob' //用于处理二进制数据})
}
2、 vue
<template><div class="tools-div"><el-button type="success" size="small" @click="exportExcelFile">导出</el-button><el-button type="primary" size="small">导入</el-button></div>
</template>
```js
<script setup>
import {exportExcel} from '@/api/category'
//点击导出后,开始执行方法 本方法是给按钮绑定的
const exportExcelFile = async () => {// exportExcel() 是一个异步函数,返回一个 Promise。//.then((resp => { })) 监听 Promise 的成功状态,但回调函数中没有任何操作。exportExcel().then((resp => {//创建blob对象let blob = new Blob([resp]);//创建a标签const link = document.createElement("a");//赋值数据link.href=window.URL.createObjectURL(blob);//设置名称link.download="分类数据.xlsx"//模拟点击link.click()}))
}
</script>
相关文章:
easyExcel使用案例有代码
easyExcel 入门,完成web的excel文件创建和导出 easyExcel官网 EasyExcel 的主要特点如下: 1、高性能:EasyExcel 采用了异步导入导出的方式,并且底层使用 NIO 技术实现,使得其在导入导出大数据量时的性能非常高效。 2、易于使…...
CPU、SOC、MPU、MCU--详细分析四者的区别
一、CPU 与SOC的区别 1.CPU 对于电脑,我们经常提到,处理器,内存,显卡,硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit(中央处理器)。CPU是一台计算机的运算核…...
机器学习:监督学习、无监督学习和强化学习
机器学习(Machine Learning, ML)是人工智能(AI)的一个分支,它使计算机能够从数据中学习,并在没有明确编程的情况下执行任务。机器学习的核心思想是使用算法分析数据,识别模式,并做出…...
SpringBoot项目注入 traceId 来追踪整个请求的日志链路
SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排查问题的时候,可以迅速根据 traceId 查找到相关请求的日志,特别是在生产环境的时候,用户可能只提供一个错误截图,我们作为开发…...
苹果廉价机型 iPhone 16e 影像系统深度解析
【人像拍摄差异】 尽管iPhone 16e支持后期焦点调整功能,但用户无法像iPhone 16系列那样通过点击屏幕实时切换拍摄主体。前置摄像头同样缺失人像深度控制功能,不过TrueTone原彩闪光灯系统在前后摄均有保留。 很多人都高估了 iPhone 的安全性,查…...
视觉图像坐标转换
1. 透镜成像 相机的镜头系统将三维场景中的光线聚焦到一个平面(即传感器)。这个过程可以用小孔成像模型来近似描述,尽管实际相机使用复杂的透镜系统来减少畸变和提高成像质量。 小孔成像模型: 假设有一个理想的小孔,…...
汽车电子电控软件开发中因复杂度提升导致的架构恶化问题
针对汽车电子电控软件开发中因复杂度提升导致的架构恶化问题,建议从以下方向进行架构优化和开发流程升级,以提升灵活性、可维护性和扩展性: 一、架构设计与模块化优化 分层架构与模块解耦 采用AUTOSAR标准的分层架构(应用层、运行…...
2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题D:回文数组试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需…...
脚本无法获取响应主体(原因:CORS Missing Allow Credentials)
背景: 前端的端口号8080,后端8000。需在前端向后端传一个参数,让后端访问数据库去检测此参数是否出现过。涉及跨域请求,一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码,出现了这个bug࿰…...
leetcode第39题组合总和
原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…...
在 macOS 系统上安装 kubectl
在 macOS 系统上安装 kubectl 官网:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ 用 Homebrew 在 macOS 系统上安装 如果你是 macOS 系统,且用的是 Homebrew 包管理工具, 则可以用 Homebrew 安装 kubectl。 运行…...
SQLark 数据迁移|断点续迁已上线(Oracle-达梦)
数据迁移是 SQLark 最受企业和个人用户欢迎的功能之一,截止目前已帮助政府、金融、能源、通信等 50 家单位完成从 Oracle、MySQL 到达梦的全量迁移,自动化迁移成功率达 96% 以上。 在 Oracle 到达梦数据库迁移过程中,SQLark V3.3 新增 断点续…...
Element Plus中el-tree点击的节点字体变色加粗
el-tree标签设置 <el-tree class"tree":data"treeData":default-expand-all"true":highlight-current"true"node-click"onTreeNodeClick"><!-- 自定义节点内容,点击的节点字体变色加粗 --><!-- 动…...
vmware安装firepower ftd和fmc
在vmware虚拟机中安装cisco firepower下一代防火墙firepower threat defence(ftd)和管理中心firepower management center(fmc)。 由于没有cisco官网下载账号,无法下载其中镜像。使用eveng模拟器中的ftd和fmc虚拟镜像…...
计算机毕业设计SpringBoot+Vue.js医院资源管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
[含文档+PPT+源码等]精品基于Python实现的微信小程序的乡村医疗咨询系统
基于Python实现的微信小程序的乡村医疗咨询系统背景,可以从以下几个方面进行阐述: 一、社会背景 医疗资源分布不均:在我国,城乡医疗资源分布不均是一个长期存在的问题。乡村地区由于地理位置偏远、经济条件有限,往往…...
Python实现GO鹅优化算法优化BP神经网络回归模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 传统BP神经网络的局限性:BP(Back Propagation)神经网络作为一种…...
7.1.2 计算机网络的分类
文章目录 分布范围交换方式 分布范围 计算机网络按照分布范围可分为局域网、广域网、城域网。局域网的范围在10m~1km,例如校园网,网速高,主要用于共享网络资源,拓扑结构简单,约束少。广域网的范围在100km,例…...
千峰React:Hooks(上)
什么是Hooks ref引用值 普通变量的改变一般是不好触发函数组件的渲染的,如果想让一般的数据也可以得到状态的保存,可以使用ref import { useState ,useRef} from reactfunction App() {const [count, setCount] useState(0)let num useRef(0)const h…...
设置同一个局域网内远程桌面Ubuntu
1、安装xrdp: 打开终端,运行以下命令来安装xrdp: sudo apt update sudo apt install xrdp 2、启动 XRDP 并设置开机自启 sudo systemctl start xrdp sudo systemctl enable xrdp 3、验证 XRDP 运行状态 sudo systemctl status xrdp 如果显示 active (ru…...
深入 Python:变量与数据类型的奥秘
在 Python 编程的世界里,变量和数据类型是构建程序大厦的基石。它们看似简单,却蕴含着无尽的奥秘和强大的功能。今天,就让我们一起深入探索 Python 中变量与数据类型的奇妙世界。 常量和表达式:数学世界的 Python 映射 在 Pytho…...
LeetCode 718 - 最长重复子数组
LeetCode 718 - 最长重复子数组 是一个典型的数组和字符串问题,适合考察动态规划、滑动窗口和二分查找等多种编程能力。掌握其多种解法及变体能够有效提高处理字符串和数组算法的能力。 题目描述 输入: 两个整数数组 nums1 和 nums2。输出: 两个数组中存在的最长的…...
什么是预训练语言模型下游任务?
问题:Word2Vec模型是预训练模型吗? 由于训练的特性,word2Vec模型一定是与训练模型。给定一个词先使用独热编码然后使用预训练好的Q矩阵得到这个词的词向量。这里指的是词向量本身就是预训练的语言模型。 什么是下游任务? 在自然…...
jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案
JVM内存模型 JVM内存模型包括哪些区域 答案:JVM内存模型主要包括以下区域: 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节码指令的地址。Java虚拟机…...
[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)
[Windows] 极限投屏_正式版 链接:https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future): 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…...
C++初阶—list类
第一章:list的介绍及使用 1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指…...
【子网掩码计算器:Python + Tkinter 实现】
子网掩码计算器:Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…...
入门基础项目(SpringBoot+Vue)
文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…...
Nginx+PHP+MYSQL-Ubuntu在线安装
在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下: 1. 更新系统包 首先,确保系统包是最新的: sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx: sudo apt install nginx启动并启用 Nginx 服务: sudo…...
车载以太网-基于linux的ICMP协议
对于车载以太网-ICMP的技术要求: /** ICMP报文格式解析* -----------------* ICMP协议用于网络诊断和错误报告,常见应用包括Ping测试。* ICMP报文结构包括:IP头部、ICMP头部和ICMP数据部分。* 下面详细介绍每个部分的结构、字段的作用以及如何解析它们。* * ICMP头部结构:*…...
