专栏首页eclipse编程导入导出这么丝滑,你用的是EasyPoi吧!

导入导出这么丝滑,你用的是EasyPoi吧!

丝滑的 EasyPoi

POI:用来处理 Excel、Word 等文件的技术。EasyPoi:让没有接触过 POI 的人也能方便的写出 Excel 的导入导出功能。说白了就是用了 EasyPoi,文件的导入导出变得 so easy! 官网地址:http://easypoi.mydoc.io/ 1. SpringBoot整合EasyPoi 引入依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--easy-poi--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>4.0.0</version> </dependency> 2. 相关注解 2.1 @ExcelTarget 作用在实体类上,表明这是一个可以用 EasyPoi 操作导入导出的实体类 常用属性:

  • value:唯一标识,不能重复。但是可以省略不写,例如 "user"

使用方法: @ExcelTarget("user") public class User implements Serializable { } 2.2 @Excel 作用在实体类中的属性上面,表明这是 Excel 中的一列。 常用属性:

  • name:Excel表中的列名,例如 name="姓名"
  • orderNum:Excel表中列的排列顺序,例如 orderNum="1"
  • type:导出类型,1 文本,2 图片,3 函数,10 数字,默认是文本
  • width:列的宽度
  • height:列的高度
  • savePath:图片的保存位置
  • exportformat:Excel 导出的时间格式,例如 exportformat="yyyy-MM-dd HH:mm:ss"
  • importFormat:Excel 导入的时间格式
  • format:同时设置导入导出的时间格式
  • isStatistics:是否合计该列?默认 false
  • needMerge:是否纵向合并单元格,默认false
  • replace:替换值,例如 replace = {"女_0", "男_1"},表示如果值为 1,则导出 ‘男’,如果值为 0,则导出 ‘女’。

使用方法: @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1") private String name; @Excel(name = "年龄", width = 10, orderNum = "2",isSta tistics = true) private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", repl ace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", form at = "yyyy-MM-dd HH:mm:ss") private Date birthday; @Excel(name = "头像信息", type = 2, width = 20,height = 30,savePath = "D:\\WorkSpace\\easy-poi\\src\\main\\resources") private String head; } 2.3 @ExcelEntity 作用在实体类中的类上面,表明这是导出的类中的类。 常用属性:

  • name:唯一标识,不能重复。

使用方法: @ExcelTarget("user") public class User implements Serializable { @ExcelEntity(name = "address") private Address address; } @ExcelTarget("address") public class Address implements Serializable { @Excel(name = "省", width = 30, orderNum = "6") private String province; @Excel(name = "市", width = 30, orderNum = "7") private String city; @Excel(name = "县", width = 30, orderNum = "8") private String county; } 2.4 @ExcelCollection 表明这是一个集合,一对多的关系 常用属性:

  • name:集合名,唯一标识
  • orderNum:Excel 表中列的排列顺序

使用方法: @ExcelTarget("user") public class User implements Serializable { @ExcelCollection(name = "购买的水果", orderNum = "9") private List<Fruit> fruits; } @ExcelTarget("fruit") public class Fruit implements Serializable { @Excel(name = "水果名") private String name; @Excel(name = "价格/元") private Double price; @Excel(name = "数量") private Integer count; } 2.5 @ExcelIgnore 作用在属性上面,导出时跳过这一列 使用方法: @ExcelIgnore @Excel(name = "荣誉", width = 60, orderNum = "5") private List<String> honors; 3. 导出 Excel 3.1 导出基本属性 定义用户类: /** * @Description 导入导出实体类 * @Author 一颗雷布斯 * @Date 2021/5/24 15:38 */ @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1" ) private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; } 测试方法: @Test void exportBasic() throws IOException { //新建测试数据 List<User> userList = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setName("周芷若" + i); user.setAge(18 + i); user.setBirthday(new Date()); user.setSex(new Random().nextInt(2)); userList.add(user); } /*---------------------下面是使用EasyPoi导出的核心方法----------------------------*/ // ExportParams() 两个参数,一个是title 表格标题, 一个是sheetName Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表","sheet1"),User.class,userList); //导出文件到指定位置 FileOutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } 执行结果:

3.2 导出图片 定义用户类(包含用户头像): /** * @Description 导入导出实体类 * @Author 一颗雷布斯 * @Date 2021/5/24 15:38 */ @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1" ) private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; //切记图片的 type = 2 @Excel(name = "头像信息", type = 2, width = 20,height = 30) private String head; } 测试方法: @Test void exportBasic() throws IOException { //新建测试数据 List<User> userList = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setName("周芷若" + i); user.setAge(18 + i); user.setBirthday(new Date()); user.setSex(new Random().nextInt(2)); //指定图像所在的位置 user.setHead("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\static\\image\\head.jpeg"); userList.add(user); } /*---------------------下面是使用EasyPoi导出的核心方法----------------------------*/ // ExportParams() 两个参数,一个是title 表格标题, 一个是sheetName Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表","sheet1"),User.class,userList); //导出文件到指定位置 FileOutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } 执行结果:

3.3 导出对象中的对象 定义用户类(包含用户地址对象): /** * @Description 导入导出实体类 * @Author 一颗雷布斯 * @Date 2021/5/24 15:38 */ @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1") private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; @ExcelEntity(name = "address") private Address address; } 地址类: /** * @Description 地址 * @Author 一颗雷布斯 * @Date 2021/5/24 16:32 */ @Data @AllArgsConstructor @ExcelTarget("address") public class Address implements Serializable { @Excel(name = "省", width = 30, orderNum = "5") private String province; @Excel(name = "市", width = 30, orderNum = "6") private String city; @Excel(name = "县", width = 30, orderNum = "7") private String county; } 测试方法: @Test void exportUserTest() throws IOException { List<User> userList = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setName("周芷若" + i); user.setAge(18 + i); user.setBirthday(new Date()); user.setSex(new Random().nextInt(2)); //设置地址 user.setAddress(new Address("湖南","长沙","宁乡")); userList.add(user); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表","sheet1"),User.class,userList); //导出文件到指定位置 FileOutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } 执行结果:

3.4 导出对象中的list集合 定义用户类(包含用户所得荣誉信息): /** * @Description 导入导出实体类 * @Author 一颗雷布斯 * @Date 2021/5/24 15:38 */ @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1") private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; @Excel(name = "荣誉", width = 60, orderNum = "5") private List<String> honors; } 测试方法: @Test void exportUserTest() throws IOException { List<User> userList = new ArrayList<>(); String honorList="吃饭比赛一等奖、国际睡觉大赛二等奖"; List<String> honors = Arrays.asList(honorList.split("、")); for (int i = 0; i < 5; i++) { User user = new User(); user.setName("周芷若" + i); user.setAge(18 + i); user.setBirthday(new Date()); user.setSex(0); //设置用户所得荣誉 user.setHonors(honors); userList.add(user); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表","sheet1"),User.class,userList); //导出文件到指定位置 FileOutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } 执行结果:

3.5 导出一对多关系 定义用户类(包含用户购买的水果信息,这里一个用户购买多个水果): @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1",needMerge = true) private String name; @Excel(name = "年龄", width = 10, orderNum = "2",needMerge = true) private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"},needMerge = true) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss",needMerge = true) private Date birthday; @ExcelCollection(name = "购买的水果", orderNum = "5") private List<Fruit> fruits; } 水果类: /** * @Description 水果实体类 * @Author 一颗雷布斯 * @Date 2021/5/24 16:43 */ @Data @AllArgsConstructor @ExcelTarget("fruit") public class Fruit implements Serializable { @Excel(name = "水果名") private String name; @Excel(name = "价格/元") private Double price; @Excel(name = "数量") private Integer count; } 测试方法: @Test void exportUserTest() throws IOException { List<User> userList = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setName("周芷若" + i); user.setAge(18 + i); user.setBirthday(new Date()); user.setSex(0); //设置用户购买的水果信息 user.setFruits(Arrays.asList(new Fruit("苹果",23.5,11),new Fruit("香蕉",4.98,21))); userList.add(user); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表","sheet1"),User.class,userList); //导出文件到指定位置 FileOutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } 执行结果:

4. 导入Excel 4.1 导入基本属性 准备文件:

定义用户类: @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1") private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; } 测试方法: @Test void importUserTest() { ImportParams importParams = new ImportParams(); //表格标题行数,默认0 importParams.setTitleRows(1); //表头行数,默认1 importParams.setHeadRows(1); //导出数据 参数1:当如excel文件 参数2:导入对象的类型 参数3:导入参数配置 List<User> userList = ExcelImportUtil.importExcel(new File("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"), User.class,importParams); if(!CollectionUtils.isEmpty(userList)) userList.forEach(user->{ System.out.println(user); }); } 执行结果:

4.2 导入图片 准备文件:

定义用户类(包含用户头像,savePath 指定用户头像保存位置): @Data @AllArgsConstructor @NoArgsConstructor @ExcelTarget("user") public class User implements Serializable { @Excel(name = "姓名", width = 30, orderNum = "1") private String name; @Excel(name = "年龄", width = 10, orderNum = "2") private Integer age; @Excel(name = "性别", width = 10, orderNum = "3", replace = {"女_0", "男_1"}) private Integer sex; @Excel(name = "生日", width = 30, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") private Date birthday; @Excel(name = "头像信息", type = 2, width = 20,height = 30,savePath = "D:\\WorkSpace\\easy-poi\\src\\main\\resources\\head") private String head; } 测试方法: @Test void importUserTest() { ImportParams importParams = new ImportParams(); //表格标题行数,默认0 importParams.setTitleRows(1); //表头行数,默认1 importParams.setHeadRows(1); //导出数据 参数1:当如excel文件 参数2:导入对象的类型 参数3:导入参数配置 List<User> userList = ExcelImportUtil.importExcel(new File("D:\\WorkSpace\\easy-poi\\src\\main\\resources\\用户表.xls"), User.class,importParams); if(!CollectionUtils.isEmpty(userList)) userList.forEach(user->{ System.out.println(user); }); } 执行结果:

头像保存位置:

5. 注意事项 导出 Excel 文件时,切记先把原来导出的 Excel 文件关掉,不然会报错!

-END-

本文分享自微信公众号 - eclipse编程(eclipsecamp),作者:一颗雷布斯

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EasyPoi导出Excel

    这几天一直在忙工作中的事情,在工作中有一个问题,可能是因为刚开始接触这个EasyPoi,对其也没有太多的理解,在项目中就使用了,有一个需求,是要导出项目中所有的...

    彼岸舞
  • SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」

    上一篇文章中简单介绍了Poi的使用方式,但是用Poi去写代码着实繁琐了一些,假如你要实现的是复杂的需求,譬如:图片导出,多表数据导出,模板导出,大数据量导出等等...

    鹿老师的Java笔记
  • 使用 EasyPOI 优雅导出Excel模板数据(含图片)

    来源 | blog.csdn.net/u012441819/article/details/96828044

    程序猿DD
  • 更简单的Excel导入方式,easypoi了解一下

    今天做Excel导出时,发现了一款非常好用的POI框架EasyPoi,其 使用起来简洁明了。现在我们就来介绍下EasyPoi,首先感谢EasyPoi 的开发者 ...

    码农飞哥
  • 使用easypoi导出excel

    二十三年蝉
  • 【springboot+easypoi】一行代码搞定简单的word导出

    小尘哥
  • 最简单使用easypoi导入导出Excel的操作手册(回炉)

    今天做Excel导出时,发现了一款非常好用的POI框架EasyPoi,其 使用起来简洁明了。现在我们就来介绍下EasyPoi,首先感谢EasyPoi 的开发者 ...

    码农飞哥
  • JAVA实现Word/Excel读写

    Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档。...

    程序源代码
  • 【easypoi(二)使用模板导出爬坑经历】

    1、开发环境,idea开发工具,windows10系统,JDK8.0;系统部署环境,CentorOS7;

    用户5640963
  • 从Excel批量导入数据说到ForkJoin的原理

    前面我们介绍了EasyPOI,用其进行Excel导入导出,非常的方便,非常的简单。但是4.0.0 版本以及其之前的版本都是通过单线程的方式对Excel中的数据进...

    码农飞哥
  • EasyPOI解析Excel文件

    采用EasyPOI技术解析Excel,我感觉这个还是挺好用的,也可能是我没有接触过更好的技术了[捂脸]

    彼岸舞
  • 如何使用FTP中的模板文件和EasyPOI来导出Excle

    因工作需要导出Excel文件,使用技术为EasyPOI,EasyPOI是一个非常好的导出文件工具,官网提供非常详细的使用文档,在项目中使用EasyPOI的模板导...

    小码农薛尧
  • 如何使用FTP中的模板文件和EasyPOI来导出Excle?

    因工作需要导出Excel文件,使用技术为EasyPOI,EasyPOI是一个非常好的导出文件工具,官网提供非常详细的使用文档,在项目中使用EasyPOI的模板导...

    小码农薛尧
  • easypoi结合spring-boot 快速使用

    此处注意必须要有空构造函数,否则会报错“对象创建错误” 关于注解@Excel,其他还有@ExcelCollection,@ExcelEntity ,@Exce...

    吟风者
  • 使用EasyPoi根据权限动态导出列——反射实现

    我们使用的注解版的导出 @Excel,官方文档中说明很详细,默认大家都会用,不会用的,copy一下官网的,跑一下,调一下就行了。

    猿天地
  • POI之easypoi操作(二)

    tanoak
  • 如何用一行代码实现excel导入导出

    早期我们实现excel导入导出的技术方案,可能会不假思索的选用Apache poi、jxl。但他们存在内存消耗大,编码相对繁琐。好在现在阿里开源了EasyExc...

    lyb-geek
  • GVP 特辑!7 款 JAVA 程序开发“大杀器” | 码云周刊第 39 期

    码云 GVP 特辑 工欲善其事,必先利其器。对于 Java 程序员来说若想提高工作效率,那么以下这 7 款 Java 程序开发工具绝对是你不能错过的,不仅可...

    码云Gitee
  • 10w+ Excel 数据导入,怎么优化?

    由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。

    Java技术栈

扫码关注云+社区

领取腾讯云代金券