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.mzph.cn/news/581682.shtml

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

相关文章

【LeetCode-剑指offer】--3.比特位计数

3.比特位计数 class Solution {public int[] countBits(int n) {int[] bites new int[n 1];for(int i 0 ; i < n;i){bites[i] Count(i);}return bites;}public int Count(int x){int count 0;while(x > 0){x & (x - 1);count;}return count;} }

Python入门学习篇(十)——函数定义函数传参方式

1 相关定义和概念 1.1 函数的理解 一段被封装的可以重复调用的代码。 1.2 函数定义语法结构 def 函数名(形参1,形参2):要封装的逻辑代码 # 注意:函数可以有返回值也可以没有返回值,没有返回值的结果是None1.3 函数调用的语法结构 函数名(形参1,形参2)1.4 简单实例 1.4.1 …

同义词替换降低论文相似度的注意事项 papergpt

大家好&#xff0c;今天来聊聊同义词替换降低论文相似度的注意事项&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换降低论文相似度的注意事项 …

计算 10亿 的和,js 和 c 的处理时长对比

计算 10亿 的和&#xff0c;js 和 c 的处理时长对比 js 4.17s let sum 0; let start new Date().getTime(); for (let i0;i<1000000000; ii1){sum sum i; } let stop new Date().getTime(); console.log((stop - start)/1000, sum);结果&#xff1a; c 3.65s #in…

Windows搭建FTP服务器教学以及计算机端口介绍

目录 一. FTP服务器介绍 FTP服务器是什么意思&#xff1f; 二.Windows Service 2012 搭建FTP服务器 1.开启防火墙 2.创建组 ​编辑3.创建用户 4.用户绑定组 5.安装ftp服务器 ​编辑6.配置ftp服务器 7.配置ftp文件夹的权限 8.连接测试 三.计算机端口介绍 什么是网络…

解决ELement-UI懒加载三级联动数据不回显(天坑)

最老是遇到这类问题头有点大,最后也是解决了,为铁铁们总结了一下几点 一.查看数据类型是否一致 未选择下 选择下 二.处理数据时使用this.$set方法来动态地设置实例中的属性&#xff0c;以确保其响应式 三.绑定v-if 确保每次重新加载 四.绑定key 五.完整代码

进行VMware日志管理

随着公司转向虚拟化其 IT 空间&#xff0c;虚拟环境日志监控正在占据日志管理的很大一部分,除了确保网络安全外&#xff0c;虚拟机日志监控还有助于管理虚拟化工具&#xff0c;这是最复杂的任务之一。 对虚拟环境日志的监控分析 当今公司中最受欢迎的虚拟平台之一是 VMware。…

图像处理-周期噪声

周期噪声 对于具有周期性的噪声被称为周期噪声&#xff0c;其中周期噪声在频率域会出现关于中心对称的性质&#xff0c;如下图所示 带阻滤波器 为了消除周期性噪声&#xff0c;由此设计了几种常见的滤波器&#xff0c;其中 W W W表示带阻滤波器的带宽 理想带阻滤波器 H ( u …

二维码能转成链接吗?具体步骤是什么样的?

将二维码分解成链接来使用&#xff0c;是经常会出现的一种需求&#xff0c;分解成的链接可以放在电脑浏览器上&#xff0c;就可以在电脑上查看二维码的内容。那么如何将二维码图片做解码处理呢&#xff1f;最简单也是很多人会选择使用的一种方法就是使用二维码解码器来处理&…

如何提高代码质量:5 个基本步骤

软件开发团队有时会遇到各种挑战&#xff0c;导致他们难以按时生产高质量的项目。在这里&#xff0c;我们讨论了通过持续测试快速保证质量的五种策略。 每个人都想要更高质量、更快的软件。对现代软件开发团队的要求是巨大的——从日益激烈的竞争和市场压力、不断增加的功能和…

php-ssrf

漏洞描述&#xff1a; SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。&#xff08;正是因为它是由服务端发起的&#xff0c;所以它能够请求…

POI根据表头模板导出excel数据,并指定单个单元格样式,多sheet。

最近的公司需求&#xff0c;因为Excel表头样式较为复杂&#xff0c;不易直接用poi写出。 需要的Excel为这种&#xff1a; 直接模板导出不能成为这样。 public void exportCheckCsdn(HttpServletResponse response) {//获取到MNR 和 MNR-DT 的List// 此处写 获取到指定li…

是德科技E9304A功率传感器

是德科技E9304A二极管功率传感器测量频率范围为9 kHz至6 GHz的平均功率&#xff0c;功率范围为-60至20 dBm。该传感器非常适合甚低频(VLF)功率测量。E系列E9304A功率传感器有两个独立的测量路径&#xff0c;设计用于EPM系列功率计。功率计自动选择合适的功率电平路径。为了避免…

【微信小程序二维码配置】微信公众平台配置二维码,小程序测试二维码,小程序动态二维码,然后扫码打开对应页面进行操作

微信小程序二维码 操作添加二维码地址配置配置项 生成二维码动态二维码生成 操作 微信公众平台地址&#xff1a;微信公众平台 选择 开发管理 – 开发设置 – 扫普通链接二维码打开小程序 添加二维码地址 配置 配置项 二维码规则: URL 为内含下载校验文件的服务器 URL, 可以…

HTML-基础知识-基本结构,注释,文档说明,字符编码(一)

1.超文本标记语言不分大小写。 2.超文本标签属性名和属性值不区分大小写。 3.超文本标签属性值重复&#xff0c;听取第一个。 4.html结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

uniapp项目如何引用安卓原生aar插件(避坑指南三)

官方文档说明&#xff1a;uni小程序SDK 【彩带- 避坑知识点】 如果引用原生aar插件&#xff0c;都配置好之后&#xff0c;云打包&#xff0c;报不包含此插件&#xff0c;除了检查以下步骤流程外&#xff0c;还要检查一下是否上打包的原生插件aar流程有问题。 1.第一步在uniapp项…

关于“Python”的核心知识点整理大全44

目录 ​编辑 15.3.4 模拟多次随机漫步 rw_visual.py 注意 15.3.5 设置随机漫步图的样式 15.3.6 给点着色 rw_visual.py 15.3.7 重新绘制起点和终点 rw_visual.py 15.3.8 隐藏坐标轴 rw_visual.py 15.3.9 增加点数 rw_visual.py 15.3.10 调整尺寸以适合屏幕 rw_vi…

Linux磁盘与文件管理

目录 一、磁盘介绍 1. 磁盘数据结构 2. 磁盘的接口类型 3. 磁盘在Linux上的表现形式 二、磁盘分区与MBR 1. 分区优缺点 2. 分区方式 3. MBR分区 4. GPT分区 三、文件系统 1. 文件系统的组成 2. 默认的文件系统 3. 文件系统的作用 4. 模拟破坏文件与修复文件 4…

C语言二维数值数组常用算法------------(C每日一编程)

--主、次对角线求和 --上、下三角求和 --N*N方阵转置 --杨辉三角 正文开始&#xff1a; 主对角线&#xff1a; 用两个双重for循环 int a[3][3], i, j, s 0; for (i 0; i < 3; i)for (j 0; j < 3; j)if (i j)s s a[i][j]; 次对角线&#xff1a; 用两个双重…

Next Station of Flink CDC

摘要&#xff1a;本文整理自阿里云智能 Flink SQL、Flink CDC 负责人伍翀&#xff08;花名&#xff1a;云邪&#xff09;&#xff0c;在 Flink Forward Asia 2023 主会场的分享。Flink CDC 是一款基于 Flink 打造一系列数据库的连接器。本次分享主要介绍 Flink CDC 开源社区在过…