alibaba easyexcel 导出excel使用

需求

传统导出,一般都是通过Workbook > Sheet > Row > Cell 获取详细Cell 设置值,比较麻烦,偶然遇到alibaba easyexcel 直接通过注解设置哪些需要导出 哪些忽略,发现特别好用。

pom依赖

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>

完整pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.demo</groupId><artifactId>tool-box-parent</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>org.example</groupId><artifactId>tool-box-export</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.demo</groupId><artifactId>tool-box-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version> <!-- 使用适合您项目的最新稳定版本 --><scope>provided</scope> <!-- 通常设置为provided,因为Servlet容器(如Tomcat)提供了实现 --></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>provided</scope></dependency></dependencies>
</project>

Sheet1DataVo

package org.example.export.vo;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.util.Date;/*** 时间:2024/6/24* 作者:jinyu* 描述:*/
@Datapublic class Sheet1DataVo {@ExcelIgnoreprivate Long id;@ExcelProperty("名字2")private String name;@ExcelProperty("年龄2")private Integer age;@ExcelProperty("时间2")private Date createTime;public Sheet1DataVo(Long id, String name, Integer age, Date createTime) {this.id = id;this.name = name;this.age = age;this.createTime = createTime;}
}

Sheet2DataVo

package org.example.export.vo;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.util.Date;/*** 时间:2024/6/24* 作者:jinyu* 描述:*/@Data
public class Sheet2DataVo {@ExcelIgnoreprivate Long id;@ExcelProperty("名字")private String name;@ExcelProperty("年龄")private Integer age;@ExcelProperty("时间")private Date createTime;public Sheet2DataVo(Long id, String name, Integer age, Date createTime) {this.id = id;this.name = name;this.age = age;this.createTime = createTime;}
}

导出具体方法

package org.example.export.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.example.export.vo.Sheet1DataVo;
import org.example.export.vo.Sheet2DataVo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** 时间:2024/6/24* 作者:jinyu* 描述:*/@RestController
@Tag(name = "导出模板", description = "导出模板")@Slf4j
public class ExportController {@GetMapping("/exportDemo")public void exportDemo(@RequestParam("name") String name, HttpServletResponse response, HttpServletRequest request)  {log.info("name:{}",name);List<Sheet1DataVo> sheet1DataVos = new ArrayList<>();Sheet1DataVo sheet1DataVo = new Sheet1DataVo(1l,name,18,new Date());sheet1DataVos.add(sheet1DataVo);List<Sheet2DataVo> sheet2DataVos = new ArrayList<>();Sheet2DataVo sheet1DataVo1 = new Sheet2DataVo(1l,name,18,new Date());sheet2DataVos.add(sheet1DataVo1);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = null;try {fileName = URLEncoder.encode("导出测试", "UTF-8").replaceAll("\\+", "%20");} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");ExcelWriter excelWriter = null;try{excelWriter = EasyExcel.write(response.getOutputStream()).build();//创建一个sheetWriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1DataVo").head(Sheet1DataVo.class).build();excelWriter.write(sheet1DataVos, writeSheet);//创建一个新的sheetWriteSheet writeSheet1 = EasyExcel.writerSheet(1, "Sheet2DataVo").head(Sheet2DataVo.class).build();excelWriter.write(sheet2DataVos, writeSheet1);} catch (IOException e) {throw new RuntimeException(e);} finally {if(excelWriter != null){excelWriter.finish();}}}
}

运行报错:
spring boot 报错 No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest
解决办法参考:

 https://blog.csdn.net/weixin_41491295/article/details/139105046?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171921105216800180634339%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171921105216800180634339&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-139105046-null-null.142^v100^pc_search_result_base3&utm_term=java.lang.IllegalStateException%3A%20No%20primary%20or%20single%20unique%20constructor%20found%20for%20interface%20javax.servlet.http.HttpServletResponse&spm=1018.2226.3001.4187

运行

在这里插入图片描述

完整代码地址gitee

https://gitee.com/jy_yjy/tool-box.git

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

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

相关文章

千年织锦:中国古代包文化的辉煌历程与现代传承

追溯至远古&#xff0c;我们的祖先就开始利用自然界的恩赐——皮革、植物纤维等&#xff0c;制作出最原始的包袋。随着时间的推移&#xff0c;技艺的提升&#xff0c;包的材质逐渐丰富起来&#xff0c;从粗糙到精致&#xff0c;从简单到复杂&#xff0c;每一次材质的革新都是人…

CentOS 7.9 CDH6.3.2集群生产环境实战部署指南

一、环境准备 1、系统环境&#xff1a; # cat /etc/os-release 2、准备工作&#xff1a; 部署资源分配 节点centos 7.9&#xff08;生产&#xff09;节点规划Postgresql部署组件备注pgsql32c、128G、2TB国产数据库Postgresql&#xff08;翰高&#xff09;可根据实际情况调整…

Wordpress图像编辑插件-palleon v3.8.1中文版语言包

Palleon是一个强大的WordPress图像编辑器&#xff0c;可以与您的WordPress网站无缝集成&#xff0c;让您快速高效地工作。它拥有为你的WordPress网站创建令人惊叹的图像所需的一切。 Palleon让您完全控制图像&#xff0c;允许您逐个像素进行更改。您可以轻松地裁剪、调整图像大…

基于盲信号处理的人声分离

1.问题描述 在实际生活中&#xff0c;存在一种基本现象称为“鸡尾酒效应”&#xff0c;该效应指即使在非常嘈杂的环境中&#xff0c;人依然可以从噪声中提取出自己所感兴趣的声音。 在实际应用中&#xff0c;我们可能需要对混合的声音进行分离&#xff0c;此时已知的只有混合…

springboot 集成阿里云 OSS

引入依赖 <!-- 阿里云oss依赖 --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.9.1</version> </dependency><?xml version"1.0" encoding"…

技术前瞻:华为鸿蒙HarmonyOS NEXT仓颉语言Beta招募亮点提前曝光

在科技迅猛发展的今天&#xff0c;华为的每一步创新都备受瞩目。6月21日&#xff0c;华为再次引领风潮&#xff0c;正式发布了自研的仓颉编程语言&#xff0c;并宣布开启HarmonyOS NEXT 仓颉语言开发者预览版Beta招募活动。这不仅是华为技术实力的展示&#xff0c;更是对开发者…

C语言基础笔记(全)

一、数据类型 数据的输入输出 1.数据类型 常量变量 1.1 数据类型 1.2 常量 程序运行中值不发生变化的量&#xff0c;常量又可分为整型、实型(也称浮点型)、字符型和字符串型 1.3 变量 变量代表内存中具有特定属性的存储单元&#xff0c;用来存放数据&#xff0c;即变量的值&a…

day53--ELK搜索

ELK搜索高级课程 1&#xff0e; 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch&#xff08;简称es&#xff09;、Logstash、Kibana 三个开源软件的组成的一个整体。这三个软件合成ELK。是用于数据抽取&#xff08;Logstash&#xff09;、搜索分析&#xff08;Elast…

学习笔记——动态路由——OSPF(报头信息、报文信息、三张表)

六、OSPF协议的报头信息、报文信息、三张表 OSPF的协议报文在一个广播域内进行传递&#xff0c;是直接封装在IP报文中的&#xff0c;协议号为89。 OSPF本身5种类型&#xff1a;分别是Hello报文、DD报文、LSR报文、LSU报文、LSAck报文&#xff0c;各种不同类型的LSA其实只是包含…

Acitity跳转延时10s会导致anr的时序问题讨论

背景&#xff1a; 针对前些天直播时候&#xff0c;主要讲解是launcher启动app&#xff0c;Activity onResume延时10s不会anr&#xff0c;但是Activity内部activity1跳转activity2就会anr问题展开了讨论 https://mp.weixin.qq.com/s/_uA5yKUTUw-9H-tWxGNK9g 这个原因为啥已经在…

『Z-Workshop』 6月22日线下ALCOVE分享活动

2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME&#xff1a;2024/06/22 ADD&#xff1a;浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区&#xff0c;致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…

综合管廊挂轨巡检机器人:安全高效管理的新力量

综合管廊、电力管廊等作为承载着各类电缆和管线的重要通道&#xff0c;管廊的安全和可靠性对城市的运行至关重要。传统人工巡检效率低、劳动强度大&#xff0c;且可能存在巡检不及时、不准确等问题。难以满足日益复杂和庞大的管廊系统的监控需求。为了解决这些问题&#xff0c;…

RabbitMQ基本概念

RabbitMQ是AMQP协议的一个开源实现&#xff0c;所以其基本概念也就是的 AMQP 协 议中的基本概念。如图3-1所示是 RabbitMQ 的整体架构图。 Message(消息):消息是不具名的&#xff0c;它由消息头和消息体组成。消息体是不透明的&#xff0c; 而消息头则由一系列可选属性组成&…

vue3中的图片懒加载指令及全局注册

vue3中的图片懒加载指令及全局注册 最近重新刷了一遍黑马的小兔鲜前端项目&#xff0c;发现有个懒加载的指令之前还没有用过。而且写法相对固定&#xff0c;因此记录一下 首先&#xff0c;懒加载&#xff08;Lazy Loading&#xff09;的作用是延迟加载某些资源或组件&#xf…

用免费的“山水博客”来管理你的离线文章

山水博客地址&#xff1a; https://github.com/opensanyue/ssblog 电脑上存了不博客文章&#xff0c;一直想找个软件整理一下。前不久在github刷到一个&#xff0c;试了一下&#xff0c;还不错&#xff0c;先看看成果。 左边我建了2个大类&#xff0c;分开用来放“csdn”和“简…

文物管理技术RFID技术

随着科技的不断发展&#xff0c;科技在各个领域都发挥着重要的作用。其中&#xff0c;在文物管理方面&#xff0c;RFID技术的应用正在逐渐引起人们的关注。RFID&#xff08;Radio Frequency Identification&#xff09;技术是一种通过无线电信号进行非接触式识别的技术&#xf…

docker curl:(56) Recv failure: Connection reset by peer

docker容器启动后&#xff0c;查看日志未发现错误&#xff0c;通过查询和分析&#xff0c;发现是期望容器打开的端口与容器实际打开的端口不一致导致。 1&#xff09;docker run -itd -p 8082:8082 vulfocus/log4j2-rce-2021-12-09:latest 2&#xff09;curl localhost:8082 …

java基于ssm+jsp 大学生校园兼职系统

1前台首页功能模块 大学生校园兼职系统&#xff0c;在大学生校园兼职系统可以查看首页、企业信息、招聘信息、论坛信息、留言反馈、我的、跳转到后台等内容&#xff0c;如图1所示。 图1系统首页界面图 学生登录&#xff0c;通过学生登录填写账号、密码等信息进行登录操作&…

OSM数据导入至PostgreSQL

好几年没写博客了&#xff0c;最近博士小论文扩展准备添加个路网数据增加定位准确性 用的读取代码是github上的代码&#xff0c;使用openstreet数据。 1&#xff0c;从BBBbike划定区域下载路网数据&#xff0c;BBBike extracts OpenStreetMap (OSM, Garmin, Shapefile etc.) …

【Proteus仿真】基于stm32的数码管时钟

【Proteus仿真】基于stm32的数码管时钟 Proteus仿真&#xff01;基于stm32的数码管时钟~_哔哩哔哩_bilibili ‍ 01原理图 ​​ 02功能描述 1.通过按键修改时间 2.数码管显示实时时间&#xff0c;时-分-秒-毫秒格式 03获取方式 https://docs.qq.com/sheet/DTExIc2dPUUJ…