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的更多相关文章

  1. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...

  2. SpringBoot整合easyexcel实现Excel的导入与导出

    导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...

  3. springboot整合easyexcel实现Excel导入导出

    easyexcel:快速.简单避免OOM的java处理Excel工具 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套 ...

  4. spring-boot整合mybatis(1)

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...

  5. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  6. springboot整合mq接收消息队列

    继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...

  7. springboot整合mybaits注解开发

    springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...

  8. SpringBoot整合Redis、ApachSolr和SpringSession

    SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...

  9. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  10. SpringBoot整合Kafka和Storm

    前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...

随机推荐

  1. Linux 内核设备驱动程序的IO寄存器访问 (下)

    Linux 内核设备驱动程序通过 devm_regmap_init_mmio() 等函数获得 struct regmap 结构对象,该对象包含可用于访问设备寄存器的全部信息,包括定义访问操作如何执行的 ...

  2. 不关闭Tamper Protection(篡改保护)下强制卸载Windows Defender和安全中心所有组件

    个人博客: xzajyjs.cn 背景介绍 由于微软不再更新arm版本的win10系统,因此只能通过安装insider preview的镜像来使用.而能找到的win10 on arm最新版镜像在安装之 ...

  3. vsftp简单配置

    添加用户 vi /etc/pam.d/vsftdp 注释掉 auth required pam_shells.so

  4. 用OLED屏幕播放视频(1): 项目介绍

    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这篇文章主要对项目的实现做整体的介绍, 包括硬 ...

  5. Spring Bean 的作用域(Bean Scope)

    前言 大家好,我是 god23bin,今天我们来聊一聊 Spring 框架中的 Bean 作用域(Scope). 什么是 Bean 的作用域? 我们在以 XML 作为配置元数据的情况下,进行 Bean ...

  6. JDK17和JDK8在windows上同时安装方便切换

    参考:https://blog.csdn.net/chencaw/article/details/121674479 一.JDK8的安装 1.电脑上已经安装了JDK8,安装主要步骤如下 (1)创建JA ...

  7. Games101现代计算机图形学入门 - 作业1~8 集合含提高项总结

    Github 地址 :Games101 作业总结 Games101 官网:Games101 - 现代图形学入门 记录 Games101 Homework 系列 1 ~ 8 及相关作业提高项 环境安装 ...

  8. .NET开发工作效率提升利器 - CodeGeeX AI编程助手

    前言 2022年6月,随着GitHub Copliot正式面向大众发布.让许多开发者都感受到了AI辅助编程工具的魅力所在,Copilot实现了帮助开发者大大提高了编程开发效率,让程序员朝九晚五成为可能 ...

  9. Biwen.QuickApi代码生成器功能上线

    [QuickApi("hello/world")] public class MyApi : BaseQuickApi<Req,Rsp>{} 使用方式 : dotnet ...

  10. 掌握这些技巧,让Excel批量数据清洗变得简单高效!

    什么是数据清洗 数据清洗是指在数据处理过程中对原始数据进行筛选.转换和修正,以确保数据的准确性.一致性和完整性的过程.它是数据预处理的一部分,旨在处理和纠正可能存在的错误.缺失值.异常值和不一致性等数 ...