入门alibaba的EasyExcel
一、关于EasyExcel
1、什么是EasyExcel,有什么作用?
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
2、为什么选择EasyExcel,而不是Apache poi或者jxl?
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。
3、怎样使用?
以下章节能让你快速使用EasyExcel对excel文件进行读写操作。
二、入门EasyExcel
1、新建一个maven项目、导入easyexcel的jar包
maven项目的jar包可以在https://mvnrepository.com/里面搜索,能快速的搜索到想要的jar包,以及版本。


我这里选择的是当前最新的2.1.4版本。

2、新建一个实体类
package com.hgl.entity; import java.util.Date; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth; // 表示列宽
@ColumnWidth()
public class UserEntity { // index--表示属性在第几列,value--表示标题
@ExcelProperty(value = "姓名", index = )
private String name; // @DateTimeFormat--对日期格式的转换
@DateTimeFormat("yyyy-MM-dd")
@ExcelProperty(value = "生日", index = )
private Date birthday; @ExcelProperty(value = "电话", index = )
private String telphone; // @NumberFormat--对数字格式的转换
@NumberFormat("#.##")
@ExcelProperty(value = "工资", index = )
private double salary; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getTelphone() {
return telphone;
} public void setTelphone(String telphone) {
this.telphone = telphone;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} }
3、提供一个供外部调用写入Excel的接口
package com.hgl.controller; import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List; import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.alibaba.excel.EasyExcel;
import com.google.common.collect.Lists;
import com.hgl.entity.UserEntity; @RestController
@RequestMapping("/excel")
public class ExcelWriteController{ /**
* 测试写入Excel文件
*
* @param response
* @throws IOException
*/
@GetMapping("/download")
public void doDownLoad(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("第一个文件", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), UserEntity.class).sheet("模板").doWrite(getData());
} /**
* 构造假数据,实际上应该从数据库查出来
*
* @return List<UserEntity>
*/
private List<UserEntity> getData(){
List<UserEntity> users = Lists.newArrayList();
for (int i = ; i <= ; i++) {
UserEntity user = new UserEntity();
user.setBirthday(new Date());
user.setName("user_" + i);
user.setSalary(1.285 * i);
user.setTelphone("" + i);
users.add(user);
}
return users;
}
}
下载结果:

4、提供一个供外部调用读取Excel的接口
首先需要写一个监听器:
package com.hgl.listener; import java.util.List; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.hgl.entity.UserEntity; /**
* 1、注意监听器不能由spring容器管理,每次调用时都需要手动new
* 2、监听器内部需要使用ioc中的bean时,可以通过构造方法传入
*
* @author guilin
*
*/
public class UserListener extends AnalysisEventListener<UserEntity>{ private List<UserEntity> data = Lists.newArrayList(); private static final Logger LOGGER = LoggerFactory.getLogger(UserListener.class); /**
* 解析每条数据时都会调用
*/
@Override
public void invoke(UserEntity user, AnalysisContext context) {
data.add(user);
} /**
* 所有数据解析完之后调用
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 可以在此处执行业务操作
// 本例就打印到控制台即可,表示读取完成
LOGGER.info(JSON.toJSONString(data));
} }
读取方法:
package com.hgl.controller; import java.io.IOException; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import com.alibaba.excel.EasyExcel;
import com.hgl.entity.UserEntity;
import com.hgl.listener.UserListener; @RestController
@RequestMapping("/excel")
public class ExcelReadController { /**
* 测试读取Excel文件
*
* @param file
* @return String
*/
@PostMapping("/read")
public String doDownLoad(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), UserEntity.class, new UserListener()).sheet().doRead();
return "success";
}
}
使用postman测试读数据:

成功读到数据:

三、收尾
这篇文章提供了最简单的使用EasyExcel进行读写操作的例子,更多使用方法请参考官方文档或开源社区。
附上官方文档地址:https://alibaba-easyexcel.github.io/
GitHub开源地址:https://github.com/alibaba/easyexcel
入门alibaba的EasyExcel的更多相关文章
- Java实现导入导出Excel:POI和EasyExcel
文章与CSDN同步,欢迎访问:https://blog.csdn.net/qq_40280582/article/details/107300081 代码地址:https://gitee.com/il ...
- SpringBoot基于easyexcel导出和写入Excel
easyexcel是阿里巴巴旗下开源项目,主要用于Excel文件的导入和导出处理,今天我们利用SpringBoot和easyexcel实战演示如何导出和写入Excel文件. 一.加入我们需要的ea ...
- JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载
EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...
- 使用easyexcel时遇到Could not initialize class net.sf.cglib.beans.BeanMap$Generator
可以访问 这里 查看更多关于大数据平台建设的原创文章. 上一篇文章 Maven项目为什么会产生NoClassDefFoundError的jar包冲突 结合了大量的图解,详细介绍了Maven项目产生ja ...
- SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入
1. 简介 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题 ...
- EasyExcel导出小结:动态标题、标题格式、相同值合并
1. 实列相关依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel& ...
- easyexcel
导出: package com.example.demo.excel.demo0; import com.alibaba.excel.annotation.ExcelProperty; import ...
- EasyExcel小试牛刀
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12029411.html 某种偶然的机会遇到了这个插件, 听说很牛X, 我之前也不知道, 不过还 ...
- 基于EasyExcel的大数据量导入并去重
源码:https://gitee.com/antia11/excel-data-import-demo 背景:客户需要每周会将上传一个 Excel 数据文件,数据量单次为 20W 以上,作为其他模块和 ...
随机推荐
- 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...
- C#LeetCode刷题之#653-两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4098 访问. 给定一个二叉搜索树和一个目标结果,如果 BST 中 ...
- 关于什么时候用,怎么用:ExecuteNonQuery(),还有其它返回值
ExecuteScalar方法返回的类型是object类型,这个方法返回sql语句执行后的第一行第一列的值,由于不知到sql语句到底是什么样的结构(有可能是int,有可能是char等等),所以Exec ...
- Nginx CORS 跨域资源共享问题
## 背景 新项目上线,前后端分离,遇到了跨域资源共享的问题,导致请求根本无法发送到后端,前端和后端貌似只能有一个来处理跨域问题,我们这边要采用nginx来解决跨域问题. ## Nginx的CORS配 ...
- 《MySQL必知必会》过滤数据,数据过滤(where ,in ,null ,not)
<MySQL必知必会>过滤数据,数据过滤 1.过滤数据 1.1 使用 where 子句 在SEL ECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤. WHERE子句在表名(FR ...
- javaSE总结(转+总结)
一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre. 2,JRE:Java Runtime Environment,java ...
- 编译Uboot时出错:【已解决】 /bin/bash: arm-linux-gcc: command not found dirname: missing operand Try 'dirname --help' for more information.
编译Uboot时出错: 错误信息如下: /bin/bash: arm-linux-gcc: command not found dirname: missing operand Try 'dirnam ...
- servlet的生命周期和工作原理介绍
一.servlet生命周期 Servlet生命周期分为三个阶段: 1)初始化阶段: 调用init()方法 2)响应客户请求阶段:调用service()方法 3)终止阶段:调用destroy()方法 T ...
- VScode+PicGo+Github+jsdelivr使用图床书写Markdown
本文讲述使用Github作为图床,VScode搭配Picgo插件书写Markdown,并使用jsdelivr进行CDN加速的配置流程. 准备阶段 首先进行以下准备工作,都很简单,不再赘述. 注册Git ...
- Tensorflow2(一)深度学习基础和tf.keras
代码和其他资料在 github 一.tf.keras概述 首先利用tf.keras实现一个简单的线性回归,如 \(f(x) = ax + b\),其中 \(x\) 代表学历,\(f(x)\) 代表收入 ...