SpringBoot整合EasyExcel
1.Excel导入导出的应用场景
在做项目中很多时候都会用到Excel的导入和导出
2.解决方案
- POI:操作比较繁琐
- EasyExcel:正如其名,'Easy'Excel相对于POI使用起来还是比较简单的
3.EasyExcel使用步骤
创建一个简单的Maven项目

导入相关依赖
<?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">
<parent>
<artifactId>01_lesson_address</artifactId>
<groupId>com.qbb.lesson</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../01_lesson_address/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.qbb</groupId>
<artifactId>alibaba_excel</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
创建一个实体类
package com.qbb.alibaba.excel.entity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import lombok.Data;
import java.util.Date;
/**
* @author QiuQiu&LL
* @create 2021-07-07 23:27
* @Description:
*/
@Data
public class ExcelStudentData {
@ExcelProperty(value = "姓名",index = 1)
private String name;
@DateTimeFormat("yyyy年MM月dd日 HH时mm分ss秒")
@ExcelProperty(value = "生日",index = 2)
private Date birthday;
@NumberFormat("#.##%")
@ExcelProperty(value = "薪资",index = 3)
private Double salary;
/**
* 忽略这个字段
*/
@ExcelIgnore
private String password;
}
穿件一个监听器listener
package com.qbb.alibaba.excel.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* @author QiuQiu&LL
* @create 2021-07-08 0:15
* @Description:
*/
@Slf4j
public class ExcelStudentDataListener extends AnalysisEventListener<ExcelStudentData> {
private static final int TEMP = 500;
private List<ExcelStudentData> list = new ArrayList<>();
@Override
public void invoke(ExcelStudentData excelStudentData, AnalysisContext analysisContext) {
log.info("解析到每一条数据" + excelStudentData);
list.add(excelStudentData);
if (list.size() >= TEMP) {
// TODO 存入数据库
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("收尾工作" + analysisContext);
}
}
读excel
package com.qbb.alibaba.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import com.qbb.alibaba.excel.listener.ExcelStudentDataListener;
import org.junit.Test;
/**
* @author QiuQiu&LL
* @create 2021-07-08 0:16
* @Description:
*/
public class ExcelReadTest {
@Test
public void simpleRead07() {
String filename = "G:/excel/01-simpleWrite-07.xlsx";
EasyExcel.read(filename, ExcelStudentData.class, new ExcelStudentDataListener()).excelType(ExcelTypeEnum.XLSX)
.sheet().doRead();
}
}
写excel
package com.qbb.alibaba.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author QiuQiu&LL
* @create 2021-07-07 23:29
* @Description:
*/
public class ExcelWriteTest {
/**
* 最简单的写
*/
@Test
public void simpleWrite07() {
String fileName = "G:/excel/01-simpleWrite-07.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelStudentData.class).sheet("模板").doWrite(data());
}
@Test
public void simpleWrite03() {
String fileName = "G:/excel/01-simpleWrite-03.xls";
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, ExcelStudentData.class).excelType(ExcelTypeEnum.XLS).sheet("模板").doWrite(data());
}
private List<ExcelStudentData> data(){
List<ExcelStudentData> list = new ArrayList<>();
//算上标题,做多可写65536行
//超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
for (int i = 0; i < 655; i++) {
ExcelStudentData data = new ExcelStudentData();
data.setName("QiuQiu&LL" + i);
data.setBirthday(new Date());
data.setSalary(0.56);
data.setPassword("123"); //即使设置也不会被导出
list.add(data);
}
return list;
}
}
简单的excel读写,大家可以参考上面的代码,或者参考官方EsayExcel
SpringBoot整合EasyExcel的更多相关文章
- SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多
关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...
- SpringBoot整合easyexcel实现Excel的导入与导出
导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...
- springboot整合easyexcel实现Excel导入导出
easyexcel:快速.简单避免OOM的java处理Excel工具 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套 ...
- spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- springboot整合mq接收消息队列
继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
随机推荐
- java实现的类似于sql join操作的工具类,通用递归,最低需要java8
直接上代码,缺包的自行替换为自己项目中存在的 import java.util.ArrayList; import java.util.Collection; import java.util.Has ...
- KRPANO资源分析工具下载720YUN全景图
提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...
- Electron包装网站的问题
原文链接 原文链接 Preface 最近尝试了很多不错的在线工具,只是每次都要进入网站,有点麻烦,于是想到之前了解过的electron,尝试一下打包成本地应用. Contents 1.下载所有源文件 ...
- 文心一言 VS 讯飞星火 VS chatgpt (98)-- 算法导论9.3 4题
四.用go语言,对一个包含n个元素的集合,假设一个算法只使用比较来确定第i小的元素,证明:无需额外的比较操作,它也能找到第 i-1 小的元素和第 n-i大的元素. 文心一言: 在这个问题中,我们要使用 ...
- How to parse OR AND within text
假设你有一行 String condition = "A or B and C"; 语句,请问怎么做才能变成一行真正的逻辑表达式(能在计算机中运行计算)? Resolution 声 ...
- options has an unknown property ‘contentBase‘
options has an unknown property 'contentBase' 踩坑新版webpack-dev-serve 新版的contentBase取消了替代属性是static
- [AHOI2002] Kitty猫基因突变
我们不妨将所有权值打到一棵树上,这很容易想到. 考虑暴力,如果我们选择了 \(w\) 个点,修改后我们会从叶子节点依次合并去计算贡献. 很显然我们可以动态规划维护. \(f[p][w][0/1/2]\ ...
- 使用Docker buildx 为 .NET 构建多平台镜像
.NET 团队有一篇博客 改进多平台容器支持, 详细介绍了.NET 7 以上的平台可以轻松的使用Docker buildx 工具构建多平台的镜像. buildx 是 Docker 官方提供的一个构建工 ...
- 解密Prompt系列18. LLM Agent之只有智能体的世界
重新回来聊Agent,前四章的LLM Agent,不论是和数据库和模型还是和搜索引擎交互,更多还是大模型和人之间的交互.这一章我们来唠唠只有大模型智能体的世界!分别介绍斯坦福小镇和Chatdev两篇论 ...
- python 自动创建Hype-V虚拟机脚本
安装模块 pip install pywinrm 脚本如下 #!/usr/bin/env python3 # coding=utf-8 # author:LJX # describe:一键创建hype ...