前言:
在使用EasyExcel导出文件时,通常都是一个Sheet数据,如果想导出多个Sheet并且每个Sheet都是各自的数据标题,就需要稍微调整下写法,比较方便,下面详细说明!

第一步、导入pom
首先需要导入对应的依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>
第二步、编写实体类
编写两个不同的实体
// Sheet1实体@Datapublic class User {@ExcelProperty("用户名")private String username;@ExcelProperty("年龄")private Integer age;}// Sheet2实体@Datapublic class Order {@ExcelProperty("订单号")private String orderNo;@ExcelProperty("金额")private BigDecimal amount;}
第三步、编写导出方法
以往我们导出单sheet是这样写的:
publicstaticvoidmain(String[] args) {String filePath = "D:/单Sheet导出.xlsx";List<User> userList = new ArrayList<>();User u1 = new User();u1.setUsername("张三");u1.setAge(20);userList.add(u1);EasyExcel.write(filePath, User.class).sheet("用户信息").doWrite(userList);System.out.println("单Sheet导出完成");}
效果是这样:

当我们需要导出多sheet时,就需要这样写:
publicstaticvoidmain(String[] args) {String filePath = "D:/多Sheet导出.xlsx";File file = new File(filePath);// 1. 创建Excel写入器(全局唯一,贯穿所有sheet)ExcelWriter writer = EasyExcel.write(file).build();// ========== Sheet1:用户数据 ==========List<User> userList = new ArrayList<>();User u1 = new User();u1.setUsername("张三");u1.setAge(20);userList.add(u1);// 创建Sheet,参数1:sheet编号,参数2:sheet名称WriteSheet sheet1 = EasyExcel.writerSheet(0, "用户列表").head(User.class).build();writer.write(userList, sheet1);// ========== Sheet2:订单数据 ==========List<Order> orderList = new ArrayList<>();Order o1 = new Order();o1.setOrderNo("OD2026001");o1.setAmount(new BigDecimal("99.99"));orderList.add(o1);WriteSheet sheet2 = EasyExcel.writerSheet(1, "订单列表").head(Order.class).build();writer.write(orderList, sheet2);// 必须关闭,刷新流、释放资源writer.finish();System.out.println("多sheet导出完成");}
效果是这样:


是不是很简单,这时我们会发现,在导出的Excel中标题都是根据实体类上的注解来的,如@ExcelProperty("订单号"),那么如果想动态随时变化这个标题又该怎么做呢?
此时就需要自己去定义标题数组了,仍然使用.head()方法,不再使用实体类!
第四步、自定义标题
EasyExcel中提供了两种方式,一种是实体类,一种是二维数组,我们可以采用二维数组方式创建标题

改造编写如下:
// ========== Sheet3:无实体,纯自定义表头 ==========// 第一列标题List<String> headRow1 = new ArrayList<>();headRow1.add("我是第一列第一行");headRow1.add("我是第一列第二行");headList.add(headRow1);// 第二列标题List<String> headRow2 = new ArrayList<>();headRow2.add("我是第二列第一行");headRow2.add("我是第二列第二行");headList.add(headRow2);List<List<String>> data = new ArrayList<>();data.add(Arrays.asList("1", "测试行"));WriteSheet sheet3 = EasyExcel.writerSheet(2, "自定义表").head(headList).build();writer.write(data, sheet3);
运行如下所示:

非常简单,如当第一行所有标题都相同时,它会自动合并单元格、后期在使用过程当中可以直接采用!
我是摸鱼师,一个从不希望被世界遗忘的博主,致力于编写更多更有趣的文章~
夜雨聆风