栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot 实现 Excel 自由导入导出,性能强的离谱,用起来还特优雅

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot 实现 Excel 自由导入导出,性能强的离谱,用起来还特优雅

一、简介 1.前言
  • 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求。
  • 除了本文要介绍的easyexcel还有EasyPoi,但是有人提出在数据量大的情况下,EasyPoi 会占用内存大,性能不够好,严重的时候,还会出现内存异常的现象。
  • 今天我给大家推荐一款性能更好的 Excel 导入导出工具:EasyExcel,希望对大家有所帮助!
2.介绍
  • easyexcel 是阿里开源的一款 Excel导入导出工具,具有处理速度快、占用内存小、使用方便的特点,底层逻辑也是基于 apache poi 进行二次开发的,目前的应用也是非常广!GitHub地址easyexcel
  • 相比 EasyPoi,EasyExcel 的处理数据性能非常高,读取 75M (46W行25列) 的Excel,仅需使用 64M 内存,耗时 20s,极速模式还可以更快!
二、实践 1.准备
  • 在 SpringBoot 项目中集成 EasyExcel 其实非常简单,仅需一个依赖即可。

   com.alibaba
   easyexcel
   3.0.5

2.EasyExcel 的导出导入支持两种方式进行处理
  • 第一种是通过实体类注解方式来生成文件和反解析文件数据映射成对象
  • 第二种是通过动态参数化生成文件和反解析文件数据

下面我们以用户信息的导出导入为例,分别介绍两种处理方式。

3.简单导出

1.首先,我们只需要创建一个UserEntity用户实体类,然后添加对应的注解字段即可,示例代码如下:

@Data
@NoArgsConstructor
public class UserWriteEntity {
    @ExcelProperty(value = "姓名")
    private String name;

    @ExcelProperty(value = "年龄")
    private int age;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "操作时间")
    private Date time;

    public UserWriteEntity(String name, int age, Date time) {
        this.name = name;
        this.age = age;
        this.time = time;
    }
}

2.然后,使用 EasyExcel 提供的EasyExcel工具类,即可实现文件的导出。

		List list = new ArrayList<>();
		//创建多条数据放入list中
		for(int i=0;i<=100000;i++){
			UserWriteEntity user=new UserWriteEntity("张三"+i,20+i,new Date(System.currentTimeMillis()));
			list.add(user);
		}


        //定义文件输出位置
		FileOutputStream outputStream= null;
		try {
			//指定文件输出地址
			outputStream = new FileOutputStream(new File("C:\Users\JWK.LAPTOP-HV8DSCMN\Desktop\user.xlsx"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		EasyExcel.write(outputStream,UserWriteEntity.class).sheet("用户信息").doWrite(list);

运行程序,打开文件内容结果!

3.简单导入

这种简单固定表头的 Excel 文件,如果想要读取文件数据,操作也很简单。

		//同步读取文件内容
		FileInputStream inputStream = null;
		try {
			//指定Excel文件地址
			inputStream = new FileInputStream(new File("C:\Users\JWK.LAPTOP-HV8DSCMN\Desktop\user.xlsx"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		list = EasyExcel.read(inputStream).head(UserWriteEntity.class).sheet().doReadSync();
		//可将结果转换成JSON格式输出查看
		System.out.println(JSONArray.toJSONString(list));
		//遍历查看结果
		for (int i=0;i<=10;i++){
			System.out.println(list.get(i).getName()+list.get(i).getAge()+list.get(i).getTime());
		}

运行程序,输出结果如下:

三、总结
  • 当然,EasyExcel 的功能还不只上面介绍的那些内容,还有基于模版进行 excel的填充,web 端 restful 的导出导出,使用方法大致都差不多。

常考文献:www.yuque.com/easyexcel

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号