使用EasyExcel导出表单表头-单层表头和多层表头

本文详细介绍了如何使用EasyExcel进行Excel文件的生成,包括固定表头和动态表头的单层及多层表头导出。通过定义实体类和设置表头信息,可以灵活地创建不同结构的Excel文件,适用于各种场景的数据导出需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、导入pom

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

相关版本信息可去maven库查询,链接如下:https://mvnrepository.com/artifact/com.alibaba/easyexcel

二、单层表头导出

2.1 固定表头

如果已知导出的表头基本不变,则可以使用以下方法生成对应的表头

定义实体类

   @Data
    public class MyData {
        @ExcelProperty("用户名称")
        private String userName;
        @ExcelProperty("用户性别")
        private String userSex;
        @ExcelProperty("用户年龄")
        private Integer userAge;
    }

调用方法生成excel文件

//生成路径
 public static final String PATH = "/Users/lilun/Downloads/";

    @Test
    public void myData() {
        // 文件名称
        String fileName = PATH + "myData" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, MyData.class)
                //从第0行开始,默认为0
//                .relativeHeadRowIndex(0)
                //sheet名称
                .sheet("模板")
                .doWrite(null);
    }

生成的文件如下图示
在这里插入图片描述

2.2 动态表头

如果表头是动态的,即每次的表头可能都会发生变化,则可以用以下的方法生成文件

   @Test
    public void myData2() {
        // 写法1
        String fileName = PATH + "myData2" + System.currentTimeMillis() + ".xlsx";
        EasyExcel.write(fileName)
                //文件的表头
                .head(genHead())
                //从第0行开始,默认为0
//                .relativeHeadRowIndex(0)
                //sheet名称
                .sheet("模板")
                .doWrite(null);
    }


    private List<List<String>> genHead() {
        //表头list的生成,实际的表头信息可以从数据库或者缓存等处动态读取
        List<List<String>> list = new ArrayList<List<String>>();
        List<String> head0 = new ArrayList<String>();
        head0.add("名称");
        List<String> head1 = new ArrayList<String>();
        head1.add("年龄");
        List<String> head2 = new ArrayList<String>();
        head2.add("性别");
        list.add(head0);
        list.add(head1);
        list.add(head2);
        return list;
    }

生成的文件如下图示
在这里插入图片描述

三、多层表头导出

3.1 固定表头

定义实体类

@Data
    public class MyComplexData {
        @ExcelProperty({"用户", "名称"})
        private String name;
        @ExcelProperty({"用户", "年龄"})
        private Integer age;
        @ExcelProperty({"用户", "性别"})
        private String sex;

        @ExcelProperty({"地址", "国家"})
        private String country;
        @ExcelProperty({"地址", "省份"})
        private String province;

        @ExcelProperty( "手机号")
        private String phone;
    }
@Test
    public void MyComplexData() {
        // 文件名
        String fileName = PATH + "MyComplexData" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, MyComplexData.class)
                //sheet名称
                .sheet("模板")
                .doWrite(null);
    }

文件生成如下图示
在这里插入图片描述

3.2 动态表头

 private List<List<String>> gemComplexHead() {
        //表头list的生成,实际的表头信息可以从数据库或者缓存等处动态读取
        List<List<String>> list = new ArrayList<List<String>>();
        List<String> head0 = new ArrayList<String>();
        //第一层
        head0.add("用户");
        //第二层
        head0.add("名称");
        List<String> head1 = new ArrayList<String>();
        //第一层
        head1.add("用户");
        //第二层
        head1.add("年龄");
        List<String> head2 = new ArrayList<String>();
        //第一层
        head2.add("用户");
        //第二层
        head2.add("性别");

        list.add(head0);
        list.add(head1);
        list.add(head2);


        List<String> head3 = new ArrayList<String>();
        head3.add("手机号");
        List<String> head4 = new ArrayList<String>();
        //第一层
        head4.add("地址");
        //第二层
        head4.add("国家");
        List<String> head5 = new ArrayList<String>();
        //第一层
        head5.add("地址");
        //第二层
        head5.add("省份");

        list.add(head3);
        list.add(head4);
        list.add(head5);
        return list;
    }

    @Test
    public void MyComplexData2() {
        // 文件名
        String fileName = PATH + "MyComplexData2" + System.currentTimeMillis() + ".xlsx";
        EasyExcel.write(fileName)
                //文件的表头
                .head(gemComplexHead())
                .sheet("模板")
                .doWrite(null);
    }

生成的文件如下图示

在这里插入图片描述

@ExcelProperty注解用于指定Excel表格中的某一列的表头标题。对于多级表头,可以通过数组来定义。例如,引用中的示例代码中使用了@ExcelProperty({"一级","二级头", "三级头","四级"})来定义了一个四级表头。其中,"一级"表示第一级表头,"二级头"表示第二级表头,以此类推。 另外,引用中的示例代码也展示了使用@ExcelProperty注解定义多级表头的方法。例如,@ExcelProperty({"用户", "名称"})表示了一个两级表头,第一级是"用户",第二级是"名称"。 如果想要实现多级表头导出,可以在使用EasyExcel进行写操作时,根据实际需求指定相应的@ExcelProperty注解。通过调用EasyExcel.write()方法并传入相应的类表格文件名,再通过.sheet()方法指定表格的sheet名称,即可实现多级表头导出。 需要注意的是,具体的实现方式可能会因为使用的框架版本不同而有所差异。可以参考引用中提供的Maven库链接查找对应版本的EasyExcel文档,以获取更详细的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java 导出excel 创建多级表头 Easyexcel web下载](https://blog.csdn.net/weixin_51216079/article/details/119782920)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用EasyExcel导出表单表头-单层表头多层表头](https://blog.csdn.net/qq_39084191/article/details/122842113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值