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

EasyExcel 复杂表头的导出(动态表头和静态表头)

问题:如图,1部分的表头是动态的根据日期变化,2部分是数据库对应的字段,静态不变的;

image.png

解决方案:如果不看1的部分,2部分+内容可以根据实体类+注解的方式导出,那么我们是不是可以先将动态表头1 写入到Excel中,然后再用注解+实体类的方式将2部分和内容写入到Excel中。

// 以下是伪代码参考,无法直接运行// 设置动态表头
List<String> head = new ArrayList<>();String name = String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue());if (StringUtils.isNotBlank(publicityReq.getCountyId())) {name = name + "\n" + depart + departName;
}head.add(name);
headList.add(head);ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), TPublicityInfo.class).build();
// 创建sheet
WriteSheet writeSheet = EasyExcel.writerSheet(String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue())).needHead(Boolean.FALSE).build();
// 将动态表头写入sheet,new ArrayList<>()代表写入空数据
WriteTable writeTable0 = EasyExcel.writerTable(0).head(headList).registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 7)).needHead(Boolean.TRUE).build();excelWriter.write(new ArrayList<>(), writeSheet, writeTable0);
// 将静态表头+内容写入sheet,tPublicityInfos代表内容数据
WriteTable writeTable2 = EasyExcel.writerTable(3).head(TPublicityInfo.class).relativeHeadRowIndex(2).needHead(Boolean.TRUE).build();excelWriter.write(tPublicityInfos, writeSheet, writeTable2);
excelWriter.finish();

下边是项目中的完整代码,可以做简单参考

public void exportExcel(Principal principal, HttpServletResponse response, PublicityInfoReq publicityReq) throws IOException {String sheetName = "%s年%s月xxxx";String depart = "单位:";String personId = AuthenticationInfo.getUserId(principal);String departsCode = "";if (StringUtils.isNotEmpty(publicityReq.getCorpId())) {DepartInfo departInfo = iDepartSCodeService.getVDeptById(publicityReq.getCorpId());departsCode = departInfo.getDepartScode();} else {departsCode = iDepartSCodeService.getDeptScode(personId);}publicityReq.setDepartsCode(departsCode);List<TPublicityInfo> tPublicityInfos = publicityMapper.listByPublicity(publicityReq);if (CollectionUtils.isNotEmpty(tPublicityInfos)) {for (int i = 0; i < tPublicityInfos.size(); i++) {TPublicityInfo tPublicityInfo = tPublicityInfos.get(i);tPublicityInfo.setNum(i+1);}}List<String> departNames = this.baseMapper.selectDepartNameByDepartId(publicityReq.getCountyId());String departName = "";if (CollectionUtils.isNotEmpty(departNames) && departNames.size() == 1) {departName = departNames.get(0);}List<List<String>> headList = new ArrayList<>();List<String> head = new ArrayList<>();String name = String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue());if (StringUtils.isNotBlank(publicityReq.getCountyId())) {name = name + "\n" + depart + departName;}head.add(name);headList.add(head);ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), TPublicityInfo.class).build();WriteSheet writeSheet = EasyExcel.writerSheet(String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue())).needHead(Boolean.FALSE).build();WriteTable writeTable0 = EasyExcel.writerTable(0).head(headList).registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 7)).needHead(Boolean.TRUE).build();excelWriter.write(new ArrayList<>(), writeSheet, writeTable0);WriteTable writeTable2 = EasyExcel.writerTable(3).head(TPublicityInfo.class).relativeHeadRowIndex(2).needHead(Boolean.TRUE).build();excelWriter.write(tPublicityInfos, writeSheet, writeTable2);excelWriter.finish();
}

本文由博客一文多发平台 OpenWrite 发布!

http://www.lryc.cn/news/330176.html

相关文章:

  • centos7 fatal error: curl/curl.h: No such file or directory
  • 【Linux】自定义协议+序列化+反序列化
  • 常见故障排查和优化
  • 选择华为HCIE培训机构有哪些注意事项
  • python怎么处理txt
  • SAMRTFORMS 转换PDF 发送邮件
  • 探讨在大数据体系中API的通信机制与工作原理
  • 算法打卡day23
  • 每天五分钟深度学习:神经网络和深度学习有什么样的关系?
  • 基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
  • 物联网监控可视化是什么?部署物联网监控可视化大屏有什么作用?
  • 设计一个Rust线程安全栈结构 Stack<T>
  • Docker Desktop 在 Windows 上的安装和使用
  • 2024年最受欢迎的 19 个 VS Code 主题排行榜
  • 突破编程_C++_网络编程(OSI 七层模型(物理层与数据链路层))
  • Spring boot如何使用redis缓存
  • 红蓝色WordPress外贸建站模板
  • python爬虫----了解爬虫(十一天)
  • 碳素光线疗法与宠物健康
  • 展锐平台camera添加底层水印
  • OSX-02-Mac OS应用开发系列课程大纲和章节内容设计
  • 热门IT【视频教程】-华为/思科/红帽/oracle
  • HCTNet:一种用于乳腺超声图像分割的混合CNN-transformer
  • 766. 托普利茨矩阵
  • 基于STM32的汽车防窒息系统
  • GoogleNet神经网络介绍
  • AI水下颜色校正解决方案,助力企业打造水下视觉盛宴
  • LINUX笔记温习
  • 钉钉服务端API报错 43008 参数需要multipart类型
  • HarmonyOS NEXT应用开发案例——阻塞事件冒泡