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熟悉的话,这一段可以直接 ...
随机推荐
- 程序员:你如何写可重复执行的SQL语句?
上图的意思: 百战百胜,屡试不爽. 故事 程序员小张: 刚毕业,参加工作1年左右,日常工作是CRUD 架构师老李: 多个大型项目经验,精通各种开发架构屠龙宝术: 小张注意到,在实际的项目开发场景中,很 ...
- SpringBoot获取树状结构数据-SQL处理
前言 在开发中,层级数据(树状结构)的获取往往可能是我们一大难点,我现在将自己获取的树状结构数据方法总结如下,希望能给有需要的小伙伴有所帮助! 一.测试数据准备 /* Navicat Premium ...
- MindSponge分子动力学模拟——Constraint约束
技术背景 在前面的几篇博客中,我们已经介绍了MindSponge的基本使用方法,比如定义一个分子系统.计算分子的单点能以及迭代器的使用等.有了这些基础的教程,用户以及可以执行一些比较简单的模拟任务,比 ...
- http、socket以及websocket的区别(websocket使用举例)
一.http.socket.websocket介绍 1.HTTP(Hypertext Transfer Protocol):HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本数据.它是基于请 ...
- 「codeforces - 1519E」Off by One
link. 点 \(A\) 与 \((0,0)\),\(B\) 共线的充要条件是 \(\frac{y_A}{x_A}=\frac{y_B}{x_B}\),即 \(k_{OA}=k_{OB}\).又考虑 ...
- C++的动态分派在HotSpot VM中的重要应用
众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定.C++ 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于多态的支持 ...
- C#使用iKvm黑科技无缝接入JVM生态
前言 时间过得飞快,一转眼国庆假期也要过去了,再不更新博客就太咸鱼了-- 最近在开发AIHub的时候想找个C#能用的命名实体识别库,但一直没找到,AI生态方面C#确实不太丰富,这块还是得Python, ...
- Makefile 入门教程
Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译.链接和其他构建任务.以下是一个详细的 Makefile 使用文档,包括基本概念.语法.示例和常见任务. 1. 基本概念 目标 (T ...
- Mybatis_plus笔记
Mybatis_plus笔记 在使用mybatis_plus的过程中我们可以明显的感受到他的强大之处.它就像是Mybatis和Jpa的结合体一样,它拥有jpa对单表的各种CRUD操作以及强大的条件构造 ...
- React项目中webpack的配置过程
初始化一个web项目 使用npm init -y 初始化一个项目 在项目目录下创建src, dist文件夹,创建webpack.config.js配置文件 然后在src文件夹下创建index.js, ...