乐于分享
好东西不私藏

Java教程:如何使用EasyExcel导出多Sheet不同数据Excel表格

Java教程:如何使用EasyExcel导出多Sheet不同数据Excel表格

前言:

在使用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);

运行如下所示:

非常简单,如当第一行所有标题都相同时,它会自动合并单元格、后期在使用过程当中可以直接采用!

我是摸鱼师,一个从不希望被世界遗忘的博主,致力于编写更多更有趣的文章~