EasyExcel导出

1.简介

        官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel

2.案例

2.1 实现的效果

        效果图如下:

2.2 实现步骤

        三种情景,主要是表头和数据有区别,简列实现步骤如下:

2.3 具体实现

2.3.1 前置-依赖导入

        <!-- easyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency><!-- POI导入导出 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency>

2.3.2 简单列表导出excel文件

        1.创建实体如下:
@Data
public class Order {/** 订单ID*/@ExcelProperty("订单ID")private String orderId;/** 总价*/@ExcelProperty("总价")private BigDecimal totalFee;/** 创建时间*/@ExcelProperty("创建时间")private Date createTime;/** 商品名称*/@ExcelProperty("商品名称")private String goodsName;/** 商品件数*/@ExcelProperty("商品件数")private int num;}
        2.controller写导出方法,这个是最简单的导出
    @GetMapping("/exportSimpleExcel")public void exportSimpleExcel(HttpServletResponse response) throws Exception{// 设置response头信息-文件名使用当前时间setHeader(response);// 获取excel数据List<Order> data = generateOrders();// 导出数据exportExcel(response,data);}private void setHeader(HttpServletResponse response) {response.reset();response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment; filename=" + System.currentTimeMillis() + ".xls");}private List<Order> generateOrders() {ArrayList<Order> orders = new ArrayList<>(10);for (int i = 0; i < 10; i++) {Order order = new Order();order.setOrderId(System.nanoTime() + "");order.setGoodsName("商品" + i);order.setTotalFee(BigDecimal.ONE);order.setCreateTime(new Date());order.setNum(5);orders.add(order);}return orders;}private void exportExcel(HttpServletResponse response, List<Order> data) throws Exception{EasyExcel.write(response.getOutputStream(), Order.class).sheet("订单").doWrite(data);}

然后在浏览器输入我们的地址就下载下来了,实现效果就不再沾图了。

2.3.3 复杂列表导出

        1.controller代码如下:
    @GetMapping("/exportComplexHeadExcel")public void exportComplexHeadExcel(HttpServletResponse response) throws Exception{// 设置response头信息-文件名使用当前时间setHeader(response);// 获取excel数据List<Order> data = generateOrders();// 导出数据exportComplexHeadExcel(response,data);}private void exportComplexHeadExcel(HttpServletResponse response, List<Order> data) throws Exception{EasyExcel.write(response.getOutputStream()).sheet("订单").head(getHeadData()).doWrite(data);}private List<List<String>> getHeadData() {List<List<String>> heads = new ArrayList<>();// 第一层循环行数的循环for (int column = 0; column < 5; column++) {List<String> columnData = new ArrayList<>();heads.add(columnData);// 表头第一列数据if(column==0){addFirstColumnData(columnData);continue;}// 表头第二列数据if(column==1){addSecondColumnData(columnData);continue;}// 表头第三列数据if(column==2){addThreeColumnData(columnData);continue;}// 表头第四列数据if(column==3){addFourColumnData(columnData);}// 表头第五列数据if(column==4){addFivelumnData(columnData);}}return heads;}private void addFivelumnData(List<String> lineData) {for (int lineNum = 0; lineNum < 3; lineNum++) {if(lineNum == 0){lineData.add("订单信息汇总");continue;}if(lineNum == 1){lineData.add("2023年12月26");continue;}lineData.add("商品件数");}}private void addFourColumnData(List<String> lineData) {for (int lineNum = 0; lineNum < 3; lineNum++) {if(lineNum == 0){lineData.add("订单信息汇总");continue;}if(lineNum == 1){lineData.add("");continue;}if(lineNum == 2){lineData.add("商品名称");}}}private void addThreeColumnData(List<String> lineData) {for (int lineNum = 0; lineNum < 3; lineNum++) {if(lineNum == 0){lineData.add("订单信息汇总");continue;}if(lineNum == 1){lineData.add("");continue;}if(lineNum == 2){lineData.add("创建时间");}}}private void addSecondColumnData(List<String> lineData) {for (int lineNum = 0; lineNum < 3; lineNum++) {if(lineNum == 0){lineData.add("订单信息汇总");continue;}if(lineNum == 1){lineData.add("");continue;}if(lineNum == 2){lineData.add("总价");}}}private void addFirstColumnData(List<String> lineData) {for (int lineNum = 0; lineNum < 3; lineNum++) {if(lineNum == 0){lineData.add("订单信息汇总");continue;}if(lineNum == 1){lineData.add("荆州公司");continue;}if(lineNum == 2){lineData.add("订单ID");}}}
        2.表头分析

        代码可以通过,head需要传的数据是List<List<String>>数据结构的数据,这个外层的List是column,这个里边的是line数据。分清楚这个,那么其他的就和简单列表是一样的了。

2.3.4 含图片导出

        1.实体增加图片字段
@Data
public class Order {/** 订单ID*/@ExcelProperty("订单ID")private String orderId;/** 总价*/@ExcelProperty("总价")private BigDecimal totalFee;/** 创建时间*/@ExcelProperty("创建时间")private Date createTime;/** 商品名称*/@ExcelProperty("商品名称")private String goodsName;/** 商品件数*/@ExcelProperty("商品件数")private int num;/** 商品图片*/@ExcelProperty("商品图片")private File img;
}
        2.controller代码
    @GetMapping("/exportContailImgExcel")public void exportContailImgExcel(HttpServletResponse response) throws Exception{// 设置response头信息-文件名使用当前时间setHeader(response);// 获取excel数据List<Order> data = generateOrders();// 添加图片addImg(data);// 导出数据exportContailImgExcel(response,data);}private void setHeader(HttpServletResponse response) {response.reset();response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment; filename=" + System.currentTimeMillis() + ".xls");}private List<Order> generateOrders() {ArrayList<Order> orders = new ArrayList<>(10);for (int i = 0; i < 10; i++) {Order order = new Order();order.setOrderId(System.nanoTime() + "");order.setGoodsName("商品" + i);order.setTotalFee(BigDecimal.ONE);order.setCreateTime(new Date());order.setNum(5);orders.add(order);}return orders;}private void addImg(List<Order> data) throws Exception{for (int i = 0; i < data.size(); i++) {Order order = data.get(i);order.setImg(new File("D:\\img\\shanzi.png"));}}private void exportContailImgExcel(HttpServletResponse response, List<Order> data) throws Exception{EasyExcel.write(response.getOutputStream(), Order.class).sheet("订单").doWrite(data);}

本次导出使用了本地图片,官网还支持其他的方式,大家可以看看官网。

先分享到这,有问题欢迎提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos开启防火墙和端口命令

Centos开启防火墙和端口命令 1 课堂小知识1.1 centos7简介1.2 iptables方式开启防火墙 2 操作步骤2.1 开启查看关闭firewalld服务状态2.2 查看端口是否开放2.3 新增开放端口2.4 查看开放的端口 3 防火墙的其他指令 1 课堂小知识 1.1 centos7简介 CentOS 7是CentOS项目发布的开…

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录&#xff0c;并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…

泰迪智能科技“供需对接就业育人项目”介绍

为帮助用人单位培养和招聘更多实用型、复合型和紧缺型人才,推动高校人才培养与就业有机联动、人才供需有效对接促进高校毕业生更加充分更高质量就业&#xff0c;经广东泰迪智能科技股份有限公司申报、全国高校毕业生就业创业指导委员会专家组审核&#xff0c;泰迪智能科技“供需…

2024年HTML+CSS+JS 网页版烟花代码

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 直接跳到末尾 获取完整源码 在线体验地址&…

可视化云监控/安防监控系统EasyCVR视频管理平台播流失败的原因(端口篇)

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章还是关于最近做到的 mapboxgl 地图展开的。 借鉴官方示例&#xff1a;https://iclient.supermap.io/examples/mapboxgl/editor.html#heatMapLayer 效果预览 技术思路 将接口数据渲染到地图中形成热力图。还需要将热…

高效Java开发分析:JProfiler 14 for Mac中文

JProfiler允许你对运行中的Java应用程序进行实时性能分析。它提供了丰富的统计数据、图表和概览&#xff0c;帮助你了解应用程序的CPU使用情况、内存使用情况、线程活动等。你可以追踪和识别性能瓶颈&#xff0c;并快速定位问题所在。 内存分析&#xff1a;软件提供了强大的内…

❀My小学习之排序算法❀

目录 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 二、分类 三、评价标准 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的…

Win10 + 4090显卡配置深度学习环境 + gaussian-splatting配置 + 实测自己的场景

目录 1 安装Anaconda 2023.09版本 2 安装CUDA11.8 3 安装深度学习库Cudnn8.6.0 4 安装VSCODE2019 5 安装Colmap3.8 6 安装git 7 安装Python3.10 Pytorch2.0.0 7 安装项目 8 采集数据 8.1 IPhone 14 pro 拍摄30张照片左右 做预处理 8.2 生成colmap位姿等信息 8.3 开…

YOLOv5改进 | 主干篇 | 利用SENetV2改进网络结构 (全网首发改进)

一、本文介绍 本文给大家带来的改进机制是SENetV2&#xff0c;其是2023.11月的最新机制(所以大家想要发论文的可以在上面下点功夫)&#xff0c;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何…

StackOverflowError的JVM处理方式

背景&#xff1a; 事情来源于生产的一个异常日志 Caused by: java.lang.StackOverflowError: null at java.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:908) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.util.ArrayL…

构建安全防线:SDLC中的供应链攻击防范最佳实践与Log360解决方案

在过去的12个月里&#xff0c;有10家公司发现了软件供应链风险。供应链中依赖关系的增加扩大了对手的攻击面。这也导致威胁行为者将注意力从仅影响最终用户的下游链转移到上游链&#xff0c;影响供应商、客户和最终用户。因此&#xff0c;让我们立即讨论如何使你的SOC团队在产品…

搭建简单的GPT聊天机器人

目录 第一步 进行语料库读取、文本预处理&#xff0c;完成data_utls.py 第二步 进行Seq2Seq模型的构建&#xff0c;完成Seq2Seq.py 第三步 进行模型参数设置、加载词典和数据、数据准备、GPU设置、构建优化器和损失函数&#xff0c;进行模型的训练和测试&#xff0c;完成…

快速排序:高效分割与递归,排序领域的王者算法

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 快速排序这个名词&#xff0c;快排之所以叫快排肯定是有点东西的。他在处理大规模数据集时表现及其…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

【头歌实训】Spark 完全分布式的安装和部署(新)

文章目录 第1关&#xff1a; Standalone 分布式集群搭建任务描述相关知识课程视频Spark分布式安装模式主机映射免密登录准备Spark安装包配置环境变量修改 spark-env.sh 配置文件修改 slaves 文件分发安装包启动spark验证安装 编程要求测试说明答案代码 第1关&#xff1a; Stand…

『精』CSS 小技巧之BEM规范

『精』CSS 小技巧之BEM规范 文章目录 『精』CSS 小技巧之BEM规范一、什么是BEM&#xff1f;二、BEM要怎么用&#xff1f;三、不用BEM会少个胳膊吗&#xff1f;&#x1f48a;四、Sass与BEM的结合&#x1f388;五、块与修饰符应放在一块&#x1f47f;参考资料&#x1f498;推荐博…

XIAO ESP32S3之物体检测加入视频流

一、前言 由于XIAO ESP32S3开发套件没有显示屏配件&#xff0c;因此加入http视频流功能&#xff0c;可通过浏览器请求ESP32S3上的视频流。 二、思路 1、XIAO ESP32S3启动后通过wifi连接到AP&#xff1b; 2、启动http服务器&#xff0c;注册get_mjpeg处理函数&#xff1b; 3…

PyTorch实战:基于Seq2seq模型处理机器翻译任务(模型预测)

文章目录 引言数据预处理加载字典对象en2id和zh2id文本分词 加载训练好的Seq2Seq模型模型预测完整代码结束语 引言 随着全球化的深入&#xff0c;翻译需求日益增长。传统的人工翻译方式虽然质量高&#xff0c;但效率低&#xff0c;成本高。机器翻译的出现&#xff0c;为解决这…

虚函数的讲解

文章目录 虚函数的声明与定义代码演示基类Person派生类Man派生类Woman 测试代码动态绑定静态绑定访问私有虚函数总结一下通过成员函数指针调用函数的方式 虚函数的声明与定义 虚函数存在于C的类、结构体等中&#xff0c;不能存在于全局函数中&#xff0c;只能作为成员函数存在…