当前位置: 首页 > news >正文

多级表头的导出

问题背景:

需要动态的生成自定义的多级表头

解决:

如果是表头能够一开始定义好的,那么使用easyexcl官网中的快速开始->写excl->复杂头写入就可以了,只需要一开始定义一个excel对应的实体对象,文档链接如下:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E5%A4%8D%E6%9D%82%E5%A4%B4%E5%86%99%E5%85%A5

但是我这里的需求,表头不是固定的,要动态生生成,解决代码如下:

表头代码

创建多级表头并合并空白行。

easyexcl默认的合并规则是:相邻的行或列如果同名就会合并,这个可以自己写自定义规则,我这里需求已经满足了。有的列是两行,有的列是三行甚至更多,我这里的解决方法是先找出表头的最高层级,对每一列的数据,追加同名行到最高层级,这样就实现了合并单元格。

注意:顺序很重要

List<List<String>> head;
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "铺货门店标记"), maxLevel));
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "冰冻化", "我司冰柜", "陈列规格"), maxLevel));
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "冰冻化", "我司冰柜", "费用"), maxLevel));
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "冰冻化", "非自有冰柜", "陈列规格"), maxLevel));
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "冰冻化", "非自有冰柜", "陈列位置"), maxLevel));
head.add(fillHraderList(Arrays.asList("上月门店执行情况", "冰冻化", "非自有冰柜", "费用"), maxLevel));private List<String> fillHraderList(List<String> list, int maxLevel) {List<String> result = new ArrayList<>(list);String lastElement = list.get(list.size() - 1);while (result.size() < maxLevel) {result.add(lastElement);}return result;
}

效果图:

表体数据填充代码

注意:顺序很重要,完全是根据列的顺序填充对应的值

// Map的key、value对应列下标,列值
List<Map<Integer, String>> dataList;dataList.forEach(data -> {// 判断列是否有值if (columnMap.containsKey(refBusinessPlanTemplateColumn)) {data.put(columnMap.get(refBusinessPlanTemplateColumn), item.getColumnValue());}else{data.put(columnMap.get(refBusinessPlanTemplateColumn),"");}             
});// 写入excl
ByteArrayOutputStream excelOut = new ByteArrayOutputStream();
ExcelWriter excelWriter = EasyExcel.write().file(excelOut).build();
WriteSheet writeSheet0 = EasyExcel.writerSheet(0).head(head).build();
excelWriter.write(dataList, writeSheet0);
excelWriter.finish();
http://www.lryc.cn/news/609556.html

相关文章:

  • 软件打包前进行文件去重
  • Unix 命令行shell基础--学习系列003
  • Web 开发 12
  • 嵌入式硬件中三极管原理分析与控制详解
  • 嵌入式硬件篇---OpenMV存储
  • 单片机51 day46
  • 基于单片机智能鱼缸/水族箱/水产养殖系统设计
  • 第二篇:深入解析 FastAPI + LangChain 实现流式对话接口:`chat` 函数详解
  • 嵌入式硬件中三极管推挽电路控制与实现
  • 单片机裸机程序设计架构
  • Ubuntu 下 MySQL 运维自动化部署教程(在线简易版)
  • MLIR Introduction
  • cobalt strike(CS)与Metasploit(MSF)联动
  • Nestjs框架: @nestjs/config 配置模块详解与实践
  • Go 语言模糊测试 (Fuzz Testing) 深度解析与实践
  • 基于鼠标位置的相机缩放和平移命令的实现(原理+源码)
  • Java 17新特性深度解读:Records、Sealed Classes与Pattern Matching
  • 宝塔面板安装WordPress教程:10分钟一键部署搭建个人博客 (2025)
  • Git如何同步本地与远程仓库并解决冲突
  • Linux 用户与组管理全解析
  • 电商系统想撑住大流量?ZKmall开源商城靠微服务 + Spring Boot3 解决单体架构难题
  • JavaScript中的作用域、闭包、定时器 由浅入深
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 机器学习——学习路线
  • 【拓扑序 容斥原理】P6651 「SWTR-5」Chain|省选-
  • 登录验证码功能实现:Spring Boot + Vue 全流程解析
  • Ethereum:智能合约开发者的“瑞士军刀”OpenZeppelin
  • Neo4j 社区版 Mac 安装教程
  • 数据结构---配置网络步骤、单向链表额外应用
  • Vue3核心语法进阶(Hook)