Excel表格的导入导出——EasyExcel

news2024/11/15 11:19:46

参考视频
csdn参考地址

一、导入依赖

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

二、实体类

  • 方式一:@Excel Property()用来设置表头
  • 方式二:@ExcelProperty(value=“名称”,index=索引)
@ToString					
@Data						//set、get、toString方法
@NoArgsConstructor			//无参构造方法
@ExcelIgnoreUnannotated		//没有标注的字段不被导出文件
public class Student{
	@ExcelProperty("编号")
	private Integer id;
	@ExcelProperty("姓名")
	private String name;
	@ExcelProperty("年龄")
	private Integer age;
	@ExcelProperty("电话")
	private String phone;
	@ExcelProperty("生日")
	private Date birthday;
	
	public Student(String name,Integer age,Integer id){
		this.name = name;
		this.age = age;
		this.id = id;
	}
}

三、工具类

public class StudentReadListener implements ReadListener<Student>{
	List<Student> list = new ArrayList<>();

	//每读一行触发一次
	@Override
	public void invoke(Student student,AnalysisContext analysisContext){
		System.out.println("读取到"+student);
		list.add(student);
	}

	//都读完后触发一次
	@Override
	public void doAfterAllAnalysed(AnalysisContext analysisContext){
		System.out.println("读取完毕");
	}
}

四、 导入

  • 在测试类里面试一下就行了
public void importExcel() throws FileNotFoundException{
	//1. 读取文件的流
	File file = new File("D:/student.xlsx");
	InputStream is = new FileInputStream(file);

	//2. 创建一个读取监听器
	StudentReadListener listener = new StudentReadListener();

	//3. 导入的参数配置
	EasyExcel.read(is,Student.class,listener)
		.excelType(ExcelTypeEnum.CSV)
		.sheet(0)			//读第几个工作表,从0开始
		.headRowNumber(1)	//列头占几行
		.doRead();
	)
}	
  • 有的同学在这里可能会成功运行但是读不出Excel的数据来
    在这里插入图片描述
  • 那么让我们来看一下到底是代码的问题还是说文件的问题
  • 在这里我要读出的文件是在D:/student.xslx 在这里插入图片描述
  • 那我们把文件改一下,改成一个不存在的文件,看看是什么反映
    在这里插入图片描述
  • 说明刚刚代码确实是指向了“D:/student.xlsx”文件,所以在连接方面是没有问题的。那么是代码配置问题还是说文件有问题。
  • 回到这个问题,我发现读取到Student的次数跟我Excel文件中的行数是一样的,是不是巧合呢?
    在这里插入图片描述
  • 于是我把Excel里面的内容清空了,得到了如下结果
    在这里插入图片描述
  • 意思就是说读到了Excel文件的行列,但就是返回的时候变成了null,所以我猜测是不是没有将Excel表中的字段一 一对应插入Student模型中
  • 到这里看到网上一大堆有的没的,都是不靠谱的解决办法,于是我先进行Excel文件的导出,如果能够导出,那我对这个导出文件进行导入,因为导出Excel的文件格式肯定是对的,并且导出代码中的配置参数也用于导入代码中就好了。
  • 下面 “五、导出” 是没问题的
  • 然后我将相同的导出参数配置到导入参数配置中
        //这是导出Excel表格的参数配置
        EasyExcel.write(response.getOutputStream())
                .head(Student.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")
                .doWrite(list);
    }
		//同样应用于导入Excel表格的参数配置
        EasyExcel.read(inputStream, Student.class,listener)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")			//读第几个工作表,从0开始
                .headRowNumber(1)	//列头占几行
                .doRead();	
  • 结果是成功了
    在这里插入图片描述
  • 虽然不知道为什么导入不成功,但是通过先将文件导出,再导入,那就没问题了

五、 导出

  • 通过localhost:8080/export,就可以导出文件了
    @GetMapping("/export")
    public void exportExcel(HttpServletResponse response) throws IOException {
        List<Student> list = new ArrayList<>();
        list.add(new Student("梅超风",19,3342));
        list.add(new Student("西门灵风",39,5621));
        list.add(new Student("司马长风",25,82145));

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        //设定要导出的excel的文件名
        String fileName = URLEncoder.encode("student","UTF-8").replaceAll("\\+","%20");
        response.setHeader("Content-disposition","attachment;filename="+fileName+".xlsx");

        //导出Excel表格
        EasyExcel.write(response.getOutputStream())
                .head(Student.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")
                .doWrite(list);
    }

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

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

相关文章

Kubernetes Pod 底层实现原理

文章目录前言一、探索 Container1.1 设置实验环境&#xff08;playground&#xff09;1.2 探索容器的 namespace1.3 探索容器的 cgroupsCheck the memory limit.二、探索 Pod2.1 设置实验环境&#xff08;playground&#xff09;2.2 探索 Pod 的容器2.3 探索 Pod 的命名空间2.4…

UDP协议重点总结(附实例)

文章目录前言一、网络的原生情况二、UDP协议2.1 UDP的特点2.1.1 不可靠性2.1.2 无连接&#xff08;不是缺点&#xff09;2.1.3 面向数据报&#xff08;优点&#xff09;2.1.4 缓冲区2.1.5 大小受限2.2 UDP协议端格式2.3 关于校验和2.4 基于UDP的应用层协议三、UDP总结&#xff…

P2279 [HNOI2003]消防局的设立

[HNOI2003]消防局的设立题目描述2020 年&#xff0c;人类在火星上建立了一个庞大的基地群&#xff0c;总共有 n 个基地。起初为了节约材料&#xff0c;人类只修建了 n-1 条道路来连接这些基地&#xff0c;并且每两个基地都能够通过道路到达&#xff0c;所以所有的基地形成了一个…

HTML5本地存储详解

html5 本地存储。前言一、localStorage 对象二、sessionStorage 对象三、localstorage 与 cookie 的区别四、localStorage 和 sessionStorage 二者的区别总结前言 ☀️本地存储是指在客户端存储数据&#xff0c;HTML5 为我们提供了两种 API&#xff0c;分别是 localStorage 与 …

算法是如何炼成的?

一、算 法 简 史算法可以追溯到古代埃及人和古希腊人使用的算术方法。在古代埃及&#xff0c;人们使用简单的加减法来解决基本的数学问题&#xff0c;而在古希腊&#xff0c;人们开始使用更加复杂的算术方法&#xff0c;比如平方、立方、平方根和立方根。随着数学的发展&#x…

css元素转换(旋转函数、rotateX 和 rotateY 的使用、移动函数、缩放函数、过渡、动画)详解

文章目录旋转函数rotateX 和 rotateY 的使用移动函数缩放函数过渡transition-timing-function 属性动画旋转函数 在 CSS3 中&#xff0c;使用 rotate 函数能够让指定的元素对象绕原点旋转&#xff0c;主要在二维空间内进行操作。 其语法格式如下所示&#xff1a; transform: …

【C++常用算法】STL基础语法学习 | 查找算法

目录 ●find ●find_if ●adjacent_find ●binary_ search ●count ●count_if ●find 1.功能描述&#xff1a; 查找指定元素&#xff0c;如果找到则放回指定元素的迭代器&#xff0c;若未找到则返回结束迭代器。 2.查看find定义下底层代码的函数原型&#xff1a; 3.…

Day849.ThreadLocal线程本地存储模式 -Java 性能调优实战

ThreadLocal线程本地存储模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于ThreadLocal线程本地存储模式的内容。 民国年间某山东省主席参加某大学校庆演讲&#xff0c;在篮球场看到十来个人穿着裤衩抢一个球&#xff0c;观之实在不雅&#xff0c;于是怒斥学校的…

用于安全医疗保健系统的基于机器学习的可伸缩区块链架构

文章目录背景相关技术简介区块链扩张性电子病历数据安全安全医疗保健的架构基于可扩展区块链架构的机器学习概述基于可扩展区块链架构的机器学习工作流程小结摘要从3.0到4.0的工业革命已经改变了医疗保健环境。患者电子健康记录(EHR)与医学研究机构共享&#xff0c;用于临床研究…

12月榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2022年12月飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站UP主。飞瓜…

Python:python简介

1&#xff1a;特点 一种解释型&#xff0c;面向对象&#xff0c;动态数据类型的开源高级程序设计语言 其特点就是&#xff1a;优雅&#xff0c;明确&#xff0c;简单&#xff0c;完善的基础代码库和大量的第三方库。 2&#xff1a;解释VS解释 3&#xff1a;应用场景 python…

基于androidstudio校园快递APP系统的设计与实现

1.课题背景及研究的目的和意义 1.1 课题背景 在其发展速度可谓一日千里的电子商务时代&#xff0c;大学生群体已成为网络购物群体中不可或缺的一部分。因此&#xff0c;高校师生对网购的需求也愈来愈强烈&#xff0c;校园快递的问题也成为了焦点&#xff0c;其中校园快递代理…

98%的数据被浪费,企业该如何释放数据价值?

在数字经济时代&#xff0c;对于广大企业来说&#xff0c;数据就是生产资料&#xff0c;算力则是生产力。飞速增长的业务数据&#xff0c;为现代企业提供了最具价值的资产。然而另一方面&#xff0c;如何存储、清理、管理、挖掘、运用数据&#xff0c;也给广大企业提出了艰巨的…

4天带你上手HarmonyOS ArkUI开发——《HarmonyOS ArkUI入门训练营之健康生活实战》

《HarmonyOS ArkUI入门训练营之健康饮食应用》是面向入门开发者打造的实战课程系列。特邀华为终端BG高级开发工程师作为本次训练营讲师&#xff0c;以健康饮食为例&#xff0c;开展技术教学及实战案例分享&#xff0c;助力入门开发者快速提升技能实力进阶。 目标学员 入门开发者…

apache httpClient关于cookie解析的报错处理

报错信息&#xff1a;o.a.h.c.p.ResponseProcessCookies - Invalid cookie header: "Set-Cookie: account"xxxxx"; expiresFri, 03 Feb 2023 06:02:40 GMT; httponly; Path/". Invalid expires attribute: Fri, 03 Feb 2023 06:02:40 GMThttpClient版本&am…

4年翻4倍年薪30W+的测试工程师个人成长之路

欢迎同行来交流&#xff0c;wx 群二维码应该过不了审核&#xff0c;私聊要把。税收图保证真实性。 一、何为测试 简单做一下科普。测试简而言之就是应用上线前&#xff0c;验证应用是否存在bug&#xff0c;是否满足产品的需求。大家津津乐道的程序员&#xff0c;也就是开发&am…

stm32 的 ESP8266 wifi 模块 (ESP - 12s) 的使用

1. ESP8266 的器件介绍 2. ESP2866外设 的引脚 3. 我所用的的ESP2866 的引脚图 4. 代码 编程的串口 5.wifi 的指令 1. AT 测试指令 2. ATRST 重启模块 3. ATGMR 查看版本信息 4. ATRESTORE 恢复出厂设置 5. ATUART115200,8,1,0,0 串口设置 串口号&#xff…

【SpringBoot应用篇】SpringBoot 业务代码中常用技巧

【SpringBoot应用篇】SpringBoot 业务代码中常用技巧自定义拦截器自定义过滤器过滤器和拦截器的区别获取Spring容器对象BeanFactoryAware接口ApplicationContextAware接口ApplicationListener接口全局异常处理类型转换器参数解析器Import导入配置普通类配置类ImportSelectorImp…

异地旁路组网:zerotier

有这么一个需求&#xff1a;需要远程访问内网的nas。然后现成的解决方案有蒲公英这个方案&#xff0c;但是个人版的话限了只能3个设备&#xff0c;因此找了半天&#xff0c;最后选择了功能类似的zerotier. 创建网络 zerotier的使用很简单&#xff0c;首先去官网http://zeroti…

vue 时间栏选择

效果图&#xff1a; 用el-carousel 的轮播组件 将样式修改 添加change事件 区分左右点击 获取当前年 和 当前月 <el-carouseltrigger"click"height"36px":autoplay"false"arrow"always"change"carouselChange"><e…