简介
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)
 
  | 
其他小技巧