EasyExcel的简单使用

前言
Excel读
1.实体类
2.读监听器与测试类
3.输出结果
Excel写
1.实体类
2.写入Excel的测试类
3.输出结果
填充Excel
1.Excel模板
2.测试类
3.输出结果
前言
EasyExcel类是一套基于Java的开源Excel解析工具类,相较于传统的框架如Apache poi、jxl等更加快速、简洁,还可以解决大文件内存溢出问题,即能让使用者在不用考虑性能、内存的等因素的情况下,快速完成Excel的读(导入)、写(导出)等功能。

版本支持:
2+版本支持Java7&Java6
3+版本支持Java8

这里使用的EasyExcel版本为3.1.1,JDK版本为1.8.0_161,同时辅助使用lombok和fastjson以简化代码或转化为Jason数据。
Maven依赖配置:

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>       //非必要<version>1.16.10</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId> //非必要<version>1.2.47</version></dependency>
</dependencies>

Excel读
样例内容:

1.实体类

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TextReadObject {@ExcelProperty(index = 0)private Integer studentId;@ExcelProperty(index = 1)private String studentName;@ExcelProperty(index = 2)private String institute;@ExcelProperty(index = 3)private Integer level_11;@ExcelProperty(index = 4)private Integer level_12;@ExcelProperty(index = 5)private Integer level_21;@ExcelProperty(index = 6)private Integer level_22;
}

其中注解@ExcelProperty可包含两个参数index和value,在简单表头(即表头只占用一行)中以下两条注解基本等价

@ExcelProperty(index = 0)
@ExcelProperty(value = “学号”)

而在复杂表头(即本例)中,需要使用index表示。
另外需要注意的是加入表头名字出现重复,会导致只有一个字段读取到数据,此外在读取操作时不建议index和value同时使用。综上所述,在已知excel表头内容的情况下使用参数index。

2.读监听器与测试类
四个监听器,这里使用前两个

AnalysisEventListener < T >
所有已实现的接口:Listener、ReadListener
直接已知子类:SyncReadListener

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Map;
import java.util.List;
import lombok.AllArgsConstructor;@AllArgsConstructor
public class DemoDataListener extends AnalysisEventListener<TextReadObject> {private List<TextReadObject> dataList;//读取表头的内容@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头->"+headMap);}//一行一行读取excel中的内容@Overridepublic void invoke(TextReadObject data, AnalysisContext context) {dataList.add(data);}//读取完成之后执行的方法@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {}
}

读取Excel的测试类:

import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;public class ExcelImport {public static void simpleRead() {String fileName = "F:\\rdtext.xls";List<TextReadObject> dataList = new ArrayList<>();//每次会读取100条数据然后返回过来,直接调用使用数据就行EasyExcel.read(fileName, TextReadObject.class, new DemoDataListener(dataList)).sheet(0)//读取第一个sheet.headRowNumber(3) //跳过前三行表头内容,假如是简单表头则这句可省略.doRead();//若需要实现读取全部sheet,可以使用.doReadAll()代替.sheet(0).doRead()for (TextReadObject dl : dataList) {System.out.println(JSON.toJSONString(dl));}}public static void main(String[] args) { simpleRead(); }
}

SyncReadListener:
所有已实现的接口:Listener、ReadListener
直接已知父类:AnalysisEventListener < T >

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.SyncReadListener;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class ExcelImportSync {public static void simpleRead() {String fileName = "F:\\text.xls";final List dataList = new ArrayList();EasyExcel.read(fileName, TextReadObject.class, new SyncReadListener() {@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头->"+headMap);}@Overridepublic void invoke(Object object, AnalysisContext context) {dataList.add(object);}}).sheet(0).headRowNumber(3).doRead();for (Object o : dataList) {TextReadObject TOB = (TextReadObject) o;System.out.println(JSON.toJSONString(TOB));}}public static void main(String[] args) { simpleRead(); }
}

相较于AnalysisEventListener < T >,SyncReadListener更加适合对多种实体类实施相同操作的情况,在定义监听器时没有指定具体的实体类。

3.输出结果
二者输出结果一样:

Excel写
1.实体类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ColumnWidth(15) //列宽,最大值为255
@HeadRowHeight(16) //表头行高
@ContentRowHeight(16) //数据行高
public class TextWriteObject {//复杂表头自动合并相同的内容@ExcelProperty(index = 0, value = {"学号", "学号", "学号"})private Integer studentId;@ExcelProperty(index = 1, value = {"姓名", "姓名", "姓名"})private String studentName;@ColumnWidth(25)//单独设置列宽@ExcelProperty(index = 2, value = {"学院", "学院", "学院"})private String institute;//复杂表头嵌套@ExcelProperty(index = 3, value = {"成绩", "第一学年", "第一学期"})private Integer level_11;@ExcelProperty(index = 4, value = {"成绩", "第一学年", "第二学期"})private Integer level_12;@ExcelProperty(index = 5, value = {"成绩", "第二学年", "第一学期"})private Integer level_21;@ExcelProperty(index = 6, value = {"成绩", "第二学年", "第二学期"})private Integer level_22;
}

此时在注解@ExcelProperty中可以同时使用参数index和value,用于同时指定位置和内容。

其他未使用注解:
@ContentStyle用于设置内容格式


@ContentFontStyle用于设置单元格内容字体格式


@ExcelIgnore不将该字段转换成Excel

@ExcelIgnoreUnannotated没有注解的字段都不转换

2.写入Excel的测试类

import java.util.ArrayList;
import java.util.List;public class ExcelExport {public static void simpleWrite(){String fileName = "F:\\wttext.xls";List<TextWriteObject> dataList = new ArrayList<>();dataList.add(new TextWriteObject(2022101, "张三","生命科学院", 653, 602, 683, 707));dataList.add(new TextWriteObject(2022102, "李四","生命科学院", 568, 596, 611, 632));dataList.add(new TextWriteObject(2022103, "王五","生命科学院", 606, 673, 624, 653));dataList.add(new TextWriteObject(2022201, "赵六","语言文学院", 710, 722, 686, 703));EasyExcel.write(fileName, TextWriteObject.class).sheet(0).doWrite(dataList);}public static void main(String[] args) { simpleWrite(); }
}

3.输出结果

原文链接:https://blog.csdn.net/hermit_f/article/details/126850664
https://blog.csdn.net/hermit_f/article/details/126850664?spm=1001.2014.3001.5506

EasyExcel的简单使用(easyExcel和poi)相关推荐

  1. EasyExcel的简单读取操作

    EasyExcel的简单读取操作 Java领域解析.生成Excel比较有名的框架有Apache poi. jxl等.但他们都存在一个严重的问题就是 非常的耗内存.如果你的系统并发量不大的话可能还行,但 ...

  2. 【java学习】EasyExcel的简单使用

    EasyExcel的简单使用 前言 Excel读 1.实体类 2.读监听器与测试类 3.输出结果 Excel写 1.实体类 2.写入Excel的测试类 3.输出结果 填充Excel 1.Excel模板 ...

  3. 使用java解析和读取excel表格(EasyExcel的简单使用)

    ** 解析excel的工具 ** Apache POI.JXL.Alibaba EasyExcel等.其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文 ...

  4. EasyExcel太简单易用了,强烈推荐!

    文章来源:[公众号:程序新视界]‍ 目录 背景 项目构建及依赖 创建实体类 生成 Excel 解析 Excel 其他相关特殊用法 小结 背景 系统中经常要导出大量的数据,格式基本上都是 Excel,然 ...

  5. Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式

    Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式 一.资源 代码实现中的带有计算公式的Excel(xls) 链接:https://pan.bai ...

  6. Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据

    Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据 一.资源 什么是Apache POI Apache POI 不同类型的数据的表格(xls) 链接: ...

  7. Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls、07版的xlsx)

    Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls.07版的xlsx) 一.资源 一个十分好用的日期类型处理包,和Java8搭配使用非常好 ...

  8. Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)

    Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...

  9. Java使用EasyExcel导出简单、复杂excel,以及多个excel打包导出下载zip

    EasyExcel是一款阿里开源的一款非常优秀Excel导入导出工具,使用内存小,处理速度快,使用方便,正好最近项目中有用到多个excel导出下载的功能,便记录下 EasyExcel使用git地址:G ...

最新文章

  1. R语言ggplot2可视化在lines线图的尾端添加线图标签、并且去除图例实战
  2. Python学习前的计划
  3. 解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug
  4. 20211201 (正定矩阵A+正定矩阵B)的最小特征值 ≥ 正定矩阵A的最小特征值+正定矩阵B的最小特征值
  5. android 如何在线程缓存实体类
  6. ThreadLocal到底有没有内存泄漏?从源码角度来剖析一波
  7. 综述 | 卷积神经网络表征可视化研究
  8. 密歇根大学团队成果:自动驾驶视觉系统——Bio-LSTM: 三维步行姿势和步态预测的生物力学反馈神经网络
  9. 风控报表课程正式开启
  10. 感知机算法—推导收敛次数的上界
  11. JDY-10M组网 蓝牙MESH组网
  12. vmoptions默认配置_idea VM options参数优化
  13. 71、不同灭火器的适用范围
  14. 威斯敏斯特教堂(西敏寺)墓碑上的话(WestMinster Abbey,When I was young and free...,修身齐家治国平天下)
  15. Convolution Arithmetic
  16. 【论文翻译】转移学习推断跨异构网络的社会联系
  17. selenium 模拟IE浏览器click元素无反应的解决方案 (python3)
  18. 定语状语异同 限定和修饰关系 句子结构(修饰和被修饰)
  19. 170907 WarGames-Behemoth(5-6)
  20. Matlab:查找要使用的函数

热门文章

  1. 「调查问卷」功能上线,收集反馈、了解需求全靠它
  2. input禁止输入特殊符号
  3. matlab 铁路振动,基于MATLAB仿真的国产铁路移频信号分析
  4. Day2—按钮动态过渡
  5. HVM,Hexagon处理器的虚拟器解决方案
  6. 关于洛谷p5705的解法c语言
  7. 简单重力感应跑步测速应用
  8. 用PS保存GIF中的每一帧-萌新向
  9. 【MATLAB】matlab求矩阵的逆矩阵2种方式
  10. 业务+研发=一体化管理平台?