1、效果如图

2、Controller

@GetMapping("/exportExcel")public void exportExcel(@RequestParam(value = "menu") String menu,

@RequestParam(value= "dwflglId") intdwflglId,

@RequestParam(value= "qjCode") String qjCode,

HttpServletResponse response)throwsIOException {//内容集合

List jthz =getJthz(dwflglId, qjCode);//表头集合

List header =getHeaderOfHz(dwflglId, qjCode);

response.setHeader("Content-Disposition", "attachment; filename=Zjlryshz.xlsx");//响应类型,编码

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

String bigTitle= "资金流入预算表";

EasyExcel.write(response.getOutputStream()).head(getExcelHeader(header, bigTitle)).registerWriteHandler(new Custemhandler()).sheet("资金流入预算导出模板").doWrite(getExportData(jthz));

}

通过getExcelHeader(header, bigTitle)得到表头集合

private List> getExcelHeader(Listheader, String bigTitle) {

List> head = new ArrayList<>();

List head0 = new ArrayList<>();

head0.add(bigTitle);

head0.add("资金项目");

head.add(head0);

head0= new ArrayList<>();

head0.add(bigTitle);

head0.add("行次");

head.add(head0);for(var h : header) {

head0= new ArrayList<>();

head0.add(bigTitle);

head0.add(h.getName());

head.add(head0);

}returnhead;

}

通过调用registerWriteHandler来设置表格样式,我这里设置只是设置表头的自适应宽度,创建一个类来继承AbstractColumnWidthStyleStrategy抽象类

packagecn.xxxx.xxxx.xxx.utils;importcom.alibaba.excel.metadata.CellData;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.write.metadata.holder.WriteSheetHolder;importcom.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;importorg.apache.poi.ss.usermodel.Cell;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.util.List;public class Custemhandler extendsAbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH = 255;//the maximum column width in Excel is 255 characters

publicCustemhandler() {

}

@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, ListcellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {if (isHead && cell.getRowIndex() != 0) {int columnWidth =cell.getStringCellValue().getBytes().length;if (columnWidth >MAX_COLUMN_WIDTH) {

columnWidth=MAX_COLUMN_WIDTH;

}else{

columnWidth= columnWidth + 3;

}

writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth* 256);

}

}private final static Logger logger = LoggerFactory.getLogger(Custemhandler.class);

}

最后在doWrite()里面放要导出的数据即可

private List> getExportData(Listjthz) {

List> sumList = new ArrayList<>();for(var row : jthz) {

List list = new ArrayList<>();

list.add(row.getZjxm());

list.add(String.valueOf(row.getZbY()));for(var xm : row.getZjlrysXms()) {if (xm.getId() == null) {

list.add("");

}else{if (xm.getZjlrysb().getXsValue() == null || xm.getZjlrysb().getXsValue().compareTo(new BigDecimal("0")) == 0) {

list.add("");

}else{

list.add(xm.getZjlrysb().getXsValue().toString());

}

}

}

sumList.add(list);

}returnsumList;

}

无论表头还是内容,传给easyexcel的都是List>这种形式的集合,可以说是二维的吧,外面的List相当于row,里面的List相当于col

参考链接:

easyexcel 检查表头是否匹配_EasyExcel的不确定表头(根据数据生成表头)的excel导出和二级表头以及设置表头的宽度自适应...相关推荐

  1. easyexcel 检查表头是否匹配_easyexcel导入获取表头并且表头为不固定列

    @Transactional(rollbackFor = Exception.class) @Overridepublic List save(List>> list, int ztId, ...

  2. python爬取网页表格数据匹配_爬取表格类网站数据并保存为excel文件

    本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...

  3. python爬取表格数据匹配_爬取表格类网站数据并保存为excel文件

    本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...

  4. 动态表头excel导出(java)

    动态表头excel导出 1. 导入依赖并设置实体 首先配置poi版本相关的maven属性 <properties><poi.version>4.1.2</poi.vers ...

  5. EasyPoi 导出表格并设置表头

    EasyPoi 导出表格 EasyPoiUtil 工具类 设置表头 NewExcelExportStylerDefaultImpl 工具类 VO实体类 对应的是表的列名 Controller 1 未设 ...

  6. excel表格打印每页都有表头_掌握这8个Excel技巧,搞定表格表头难题你比同事更轻松...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 我们用Excle制作表格时,一般都会制作一个表头增强阅读性,合适的表头能够让我们的表格更美观.逻辑更清晰,但对于很多小伙伴 ...

  7. easyexcel 检查表头是否匹配_利用easyexcel生成excel文件-自定义表头与数据栏对应的处理方式...

    前面几篇文章测试过用easyexcel生成动态表头,动态样式.特别是动态表头以及下面数据列表与表头字段的对应是采用注解方式实现的.但在实际工作中,有些到处是灵活生成的,也就是说对于同一个类,在不同的场 ...

  8. 你如何检查选择器是否匹配jQuery中的内容? [重复]

    本文翻译自:How do you check if a selector matches something in jQuery? [duplicate] This question already ...

  9. easyexcel导出百万级数据_百万级别数据Excel导出优化

    这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现了服务 ...

最新文章

  1. 20180513模拟赛
  2. Hadoop Hive导入数据命令
  3. 项目如何用jetty运行_阿里大牛教你如何用Dubbox+SpringBoot+Docker架构,实现双11项目...
  4. [html] 如果要开发一个在超级大屏上显示的可视化页面,你首先要考虑什么?
  5. Sharepoint学习笔记—ECM系列--4 根据位置设置的默认元数据值(Location-Based Metadata Defaults)
  6. AngularJs angular.element
  7. centos识别移动硬盘U盘,需安装【ntfs-3g】
  8. System.load 和 System.loadLibrary详解
  9. Flutter入门进阶之旅(七)GestureDetector
  10. matlab中ezplot和plot, fplot这3
  11. 4、http编程——setsockopt函数
  12. Veritas Backup Exec 21配置存储
  13. adobe acrobat pro字体很怪,有点发虚,不整齐,调整方法
  14. PHP 接收 UDP包_常用的抓包工具包含电脑端及手机端
  15. Android-深色模式篇
  16. 《从Paxos到Zookeeper分布式一致性原理与实践》读书笔记
  17. 51单片机数码管计数器
  18. 说说 jBPM 流程虚拟机的原理
  19. html表格自动分列,CSS3 Columns分列式布局方法简介
  20. windows中不能创建的目录

热门文章

  1. paypal nvp name value paire paypal ecshop sanbox测试账号
  2. 云原生之在kubernetes环境下部署wordpress
  3. 如何为Android App 添加快捷方式
  4. ios显示wifi无网络连接到服务器,iOS APP没有联网权限解决办法
  5. Gstreamer 插件黑名单问题
  6. 聚合数据短信验证码接口实现 Android开发短信验证码
  7. Linux基础——运维 (operation)
  8. idea的maven因证书审查问题而无法下载jar包的解决方案
  9. 华为mate10手机听筒测试软件,【华为Mate10评测】通讯:终于可以一边电话一边游戏_华为 Mate 10保时捷版_手机评测-中关村在线...
  10. 性能分析利器总结一《VisualVM》