【EasyExcel】在Java中操作Excel 完成数据的导入导出

news/2023/6/6 23:10:16

快速入门

引入依赖

构建实体类

数据导出

参数

WriteWorkbook

WriteSheet

WriteTable

测试

数据导入

测试


        EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

GitHub地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

快速入门

引入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.0</version>
</dependency>

构建实体类

@Data //为实体类提供set、get方法
public class User {//此注解用于Excel的表头@ExcelProperty("用户姓名")private String username;@ExcelProperty("用户性别")private String sex;@ExcelProperty("用户年龄")private Integer age;//此注解会在数据导出之后忽略该字段@ExcelIgnoreprivate String address;
}

数据导出

参数

  • WriteWorkbook 可以理解成一个excel
  • WriteSheet 理解成一个excel里面的一个表单
  • WriteTable 一个表单里面如果有多个实际用的表格,则可以用WriteTable

这是三个参数都有的通用参数,如果这些均为空,那么默认使用上级。

名称默认值描述
converter默认加载了很多转换器,这里可以加入不支持的字段
writeHandler写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用
relativeHeadRowIndex0写入到excel和上面空开几行
headclazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class
clazzhead二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据
autoTrimtrue会对头、读取数据等进行自动trim
use1904windowingfalseexcel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始
useScientificFormatfalse数字转文本的时候在较大的数值的是否是否采用科学计数法
needHeadtrue是否需要写入头到excel
useDefaultStyletrue是否使用默认的样式
automaticMergeHeadtrue自动合并头,头中相同的字段上下左右都会去尝试匹配
excludeColumnIndexes需要排除对象中的index的数据
excludeColumnFieldNames需要排除对象中的字段的数据
includeColumnIndexes只要导出对象中的index的数据
includeColumnFieldNames只要导出对象中的字段的数据

WriteWorkbook

EasyExcel.write(fileName, User.class)//在write方法之后,在 sheet方法之前都是设置WriteWorkbook的参数.sheet("模板").doWrite(传入的数据);

WriteSheet

EasyExcel.write(fileName, User.class).sheet("模板")//在sheet方法之后,在 sheet方法之前都是设置WriteSheet的参数.doWrite(传入的数据);

WriteTable

EasyExcel.write(fileName, User.class).sheet("模板").table()//在table方法之后,在 sheet方法之前都是设置WriteTable的参数.doWrite(传入的数据);​

测试

public class TestWrite {public static void main(String[] args) {String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";//创建一个集合放入用户信息List<User> list = new ArrayList<>();User u1 = new User("张三","男",18,"福建省");User u2 = new User("李四","女",17,"浙江省");User u3 = new User("王五","男",22,"江西省");User u4 = new User("赵六","男",19,"江苏省");User u5 = new User("小七","女",20,"广东省");list.add(u1);list.add(u2);list.add(u3);list.add(u4);list.add(u5);//这里用到了EasyExcel的写功能//write传入文件导出位置以及写入信息的字节码文件//sheet传入模板内容//doWrite用于将传入的数据进行分页查询EasyExcel.write(fileName, User.class).sheet("UserTable").doWrite(list);}
}

数据导入

public class TestRead {public static void main(String[] args) {String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";EasyExcel.read(fileName, User.class,new ExcelListener()).sheet()//doReda()方法用于关闭读取流.doRead();}
}

public class ExcelListener extends AnalysisEventListener<User> {/*** 一行一行读取Excel内容,从第二行开始读取* @param user* @param analysisContext*/@Overridepublic void invoke(User user, AnalysisContext analysisContext) {System.out.println(user);}@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头信息" + headMap);}/*** 读取完Excel后执行* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("读取完Excel后执行");}
}

测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4559331.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

用python画一只写轮眼

两年前刚学python的时候的一个小作业&#xff0c;其实代码很简单就是用turtle库里面几个很基础的函数写的&#xff0c;本来觉得写得很稀碎&#xff0c;没什么借鉴意义&#xff0c;但一直有人问我要代码&#xff0c;那就发一下吧&#xff0c;感兴趣的话可以跑一下玩玩。 import …

Insta360影石ONE X2全新上市,推出火影联名版

Insta360影石发布口袋全景防抖相机ONE X2&#xff0c;可拍摄5.7K全景视频&#xff0c;为日常记录、创意摄影而生。目前已在京东旗舰店、天猫旗舰店、官方商城正式开售&#xff0c;定价为2798元; 集英社火影忍者首次IP跨界相机品牌&#xff0c;共推ONE X2火影联名版&#xff0c;…

mysql b 树 锁_mysql B+树底层原理总结思考*

Update (2021-02-23)回表&#xff1a;e.g. select A from .... where B ...: 其中B是索引&#xff1b;显然如果AB那么直接就返回结果了&#xff0c;一次查询得到结果&#xff0c;就不用回表如果A < B: 那么也不用回表&#xff0c;B联合索引完全覆盖A, 也是一次查询得到结果A…

写轮眼桌面时钟

编译环境&#xff1a;VS2008实现&#xff1a;Win32API功能&#xff1a;可停留在桌面&#xff0c;并置顶&#xff0c;显示当前系统时间和日期源码及可执行文件下载链接&#xff1a;http://pan.baidu.com/s/1eQBqr0Q

中关村,阳光--07年的“肉麻”带来羁绊之动力

欲看正文&#xff0c;请先读我&#xff1a;题目可能显得“肉麻”了点&#xff0c;但是很多细腻的感情也会对人生道路以及扯不上关系的莫名感动产生巨大的影响。就像一个学术名词说的&#xff0c;叫什么“蝴蝶效应”。不过那时的个人微妙感情&#xff0c;还谈及不到学术&#xf…

我和你 (1)

我和你&#xff01; 我和你的相识不能说很传奇&#xff0c;但却让我时刻充满幻想。 现在回想起来&#xff0c;我俩自从高中起&#xff0c;就在一起。初升高时&#xff0c;我们同时进入了一所高中。也许我们都有一种恋家的心理&#xff0c;第一次高考我们都落榜了&#xff0c;…

我的2012---动荡

2012是我的本命年&#xff0c;我已经24岁了&#xff0c;这显然也不能找谁说理去。我觉得今天阳光很好&#xff0c;2012的最后一天&#xff0c;但这是阳历&#xff0c;距离我的第二个本命年结束还有一个多月的时间。关于动荡的原因&#xff0c;总体来说罪过多数还是来源于自己。…

求职前应该考虑的事| 致六月毕业的我们!

直到现在&#xff0c;秋招已经过去一大半了&#xff0c;也许有人拿到了offer&#xff0c;又或者在等offer的途中&#xff0c;也有人还没意识到要找工作&#xff0c;以为离毕业还很远。 不管是否拿到了offer&#xff0c;坚持下去一定会拿到dream offer&#xff0c;永远不要放弃希…