springboot 结合easyexcel实现动态表头的方法

java 复制代码
package com.yili.survey.excel;

import com.alibaba.excel.EasyExcel;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;

/**
 * 类名称:ExcelTest
 * 描述:
 * 创建人:赵英杰
 * 创建时间:2023-09-05 11:17
 */
@SpringBootTest(classes = ExcelTest.class)
public class ExcelTest {

    @Value("${static.temp}")
    private String surveyLocalPath;

    @Test
    void test() {
        dynamicHeadWrite();
    }

    /**
     * 数据
     *
     * @return {@link List }<{@link List }<{@link String }>>
     * @author ZhaoYingJie
     * @date 2023-09-05 14:24:22
     */
    private List<List<String>> data() {

        List<List<String>> data = new ArrayList<>();
        List<String> row1 = new ArrayList<>();
        row1.add("喜欢吃苹果的数量");
        row1.add("10");
        row1.add("5");
        data.add(row1);

        List<String> row2 = new ArrayList<>();
        row2.add("喜欢吃西瓜的数量");
        row2.add("8");
        row2.add("3");
        data.add(row2);
        return data;
    }

    /**
     * 动态头,实时生成头写入
     * <p>
     * 思路是这样子的,先创建List<String>头格式的sheet仅仅写入头,然后通过table 不写入头的方式 去写入数据
     *
     * <p>
     * 1. 创建excel对应的实体对象
     * <p>
     * 2. 然后写入table即可
     */
    private void dynamicHeadWrite() {
        // 获取保存路径
        String path = surveyLocalPath;
        // 设置文件名
        String fileName = path + "test_excel.xls";
        EasyExcel.write(fileName)
                // 这里放入动态头
                .head(head()).sheet("模板")
                // 当然这里数据也可以用 List<List<String>> 去传入
                .doWrite(data());
    }

    /**
     * 头
     *
     * @return {@link List }<{@link List }<{@link String }>>
     * @author ZhaoYingJie
     * @date 2023-09-05 14:24:04
     */
    private List<List<String>> head() {
        List<List<String>> list = new ArrayList<>();
        List<String> head0 = new ArrayList<>();
        head0.add("Q1喜欢吃什么");
        head0.add("Q1");
        List<String> head1 = new ArrayList<>();
        head1.add("Q1喜欢吃什么");
        head1.add("Q1");
        List<String> head2 = new ArrayList<String>();
        head2.add("Q2喜欢吃什么_苹果");
        head2.add("Q2_1");
        List<String> head3 = new ArrayList<String>();
        head3.add("Q2喜欢吃什么_苹果");
        head3.add("Q2_1");
        List<String> head4 = new ArrayList<String>();
        head4.add("Q2喜欢吃什么_西瓜");
        head4.add("Q2_2");
        List<String> head5 = new ArrayList<String>();
        head5.add("Q2喜欢吃什么_西瓜");
        head5.add("Q2_2");

        list.add(head0);
        list.add(head1);
        list.add(head2);
        list.add(head3);
        list.add(head4);
        list.add(head5);
        return list;
    }
}
相关推荐
提笔了无痕3 小时前
git基本了解、常用基本命令与使用
git·后端
unique_perfect3 小时前
vue2与springboot实现deepseek打印机聊天
spring boot·websocket·ai·vue2·deepseek
java1234_小锋3 小时前
Spring IoC的实现机制是什么?
java·后端·spring
喵个咪4 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:JWT 集成指南
后端·go
绝不收费—免费看不了了联系我4 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
喵个咪4 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:OPA 集成指南:从原理到实践
后端·go
哈哈老师啊4 小时前
Springboot学生综合测评系统hxtne(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring boot
Victor3565 小时前
Netty(11) Netty的心跳机制是什么?为什么需要它?
后端
Victor3565 小时前
Netty(12)Netty支持哪些协议和传输方式?
后端
无限大65 小时前
为什么电脑需要"内存"和"硬盘"?——存储金字塔的秘密
后端