简介
Easypoi的目标不是替代poi,而是让一个不懂导入导出的快速使用poi完成Excel和word的各种操作,而不是看很多api才可以完成这样工作。
使用
- 1.easypoi 父包–作用大家都懂得
- 2.easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理
- 3.easypoi-base 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
- 4.easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
- 5.sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了
如果不使用spring mvc的便捷福利,直接引入easypoi-base 就可以了,easypoi-annotation
如果使用maven,请使用如下坐标
| <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>4.1.0</version> </dependency>
|
spring boot 依赖
| <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.0.0</version> </dependency>
|
注解
常用注解介绍:
点击这里 详细介绍
测试导出
IDEA新建一个普通的maven项目,导入所需依赖
新建一个User实体类,测试类,用来模拟数据
注意:实体类必须实现序列化接口
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Data @ExcelTarget("users") public class User implements Serializable {
@ExcelIgnore private String id;
@Excel(name = "姓名") private String name;
@Excel(name = "状态", replace = {"激活_1", "锁定_0"}) private String status;
@Excel(name = "生日", width = 35.0, format = "yyyy-MM-dd HH:mm:ss") private Date bir;
@Excel(name = "年龄") private String age; }
|
TestCode.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class TestCode { public List<User> getList() { List<User> users = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setId(String.valueOf(i)); user.setName("哈哈" + i); if (i % 2 == 0) { user.setStatus("1"); } else { user.setStatus("0"); } user.setBir(new Date()); user.setAge(String.valueOf(10 + i)); users.add(user); } return users; }
@Test public void export() throws IOException { List<User> list = getList(); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息", "用户sheet"), User.class, list); FileOutputStream outputStream = new FileOutputStream("C:\\Users\\26400\\Desktop\\test.xls"); workbook.write(outputStream); outputStream.close(); workbook.close(); } }
|
这样简单的导出就可以了,启动测试即可。
导出List 集合
实体类新增 爱好字段
| @Excel(name = "爱好",width = 30.0) public List<String> hobbys;
|
赋值
| if (i % 2 == 0) { user.setStatus("1"); user.setHobbys(Arrays.asList("看电视","写代码")); } else { user.setStatus("0"); user.setHobbys(Arrays.asList("听音乐","旅游")); }
|
导出之后发现是这种格式的 [看电视, 写代码]
自定义格式
改造实体类如下
| public List<String> hobbys;
@Excel(name = "爱好", width = 30.0) public String hobbystr;
public String getHobbystr() { StringBuffer buffer = new StringBuffer(); for (String hobby : hobbys) { if (hobby.length() != 0) { buffer.append(hobby).append("、"); } buffer.append(hobby); } return buffer.toString(); }
|
通过自定义 get
方法进行格式的转换。
导出对象中含有对象
修改User实体类
| @ExcelEntity private Card card;
|
新建Card.java
| @Data @ExcelTarget("card") public class Card implements Serializable {
@Excel(name = "身份证号", width = 20.0) private String no;
@Excel(name = "家庭地址",width = 20.0) private String address; }
|
修改测试类
|
Card card = new Card(); card.setNo("2314124124124124"); card.setAddress("山东省济南市长清区"); user.setCard(card);
|
导出多个对象
修改USer.java
| @ExcelCollection(name = "订单列表") private List<Order> orders;
|
新建Order.java
| @ExcelTarget("orders") @Data public class Order implements Serializable {
@Excel(name = "订单编号",width = 20.0) private String number;
@Excel(name = "订单名称") private String name; }
|
赋值
| List<Order> orders = new ArrayList<>(); for (int j = 0; j < 3; j++) { Order order = new Order(); order.setNumber(String.valueOf(System.currentTimeMillis())); order.setName("订单" + j); orders.add(order); } user.setOrders(orders);
|
导出图片
修改User.java
| @Excel(name = "头像", width = 20, height = 20, type = 2) private String photo;
|
赋值
| user.setPhoto("C:\\Users\\26400\\Desktop\\logo.png");
|
测试即可。
导入Excel
导入基本数据
基本的导入功能,先创建一个Excel文件模板
创建一个对应的实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Data @ExcelTarget("emp") public class Emp implements Serializable {
@Excel(name = "编号") private String id;
@Excel(name = "姓名") private String name;
@Excel(name = "年龄") private Integer age;
@Excel(name = "生日", format = "yyyy-MM-dd HH:mm:ss") private Date bir;
@Excel(name = "状态", replace = {"激活_1", "锁定_0"}) private String status; }
|
新增导入方法
| @Test public void exImport() throws Exception { ImportParams params = new ImportParams(); params.setTitleRows(1); params.setHeadRows(1); List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\26400\\Desktop\\导入.xls"), Emp.class, params); emps.forEach(System.out::println); }
|
运行后结果:
| Emp(id=0, name=哈哈0, age=10, bir=Mon Nov 22 18:31:20 CST 2021, status=1) Emp(id=1, name=哈哈1, age=11, bir=Mon Nov 22 18:31:20 CST 2021, status=0) Emp(id=2, name=哈哈2, age=12, bir=Mon Nov 22 18:31:20 CST 2021, status=1) Emp(id=3, name=哈哈3, age=13, bir=Mon Nov 22 18:31:20 CST 2021, status=0) Emp(id=4, name=哈哈4, age=14, bir=Mon Nov 22 18:31:20 CST 2021, status=1)
|
其他小技巧