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

easyexcel填充方式导出-合并单元格并设置边框

填充的模板
在这里插入图片描述
最后导出效果
在这里插入图片描述

实体

/*** 账户实体类* @author test* @date 2025-07-28*/
@Getter
@Setter
class Test {/*** 账户类型*/private String accType;/*** 账户余额*/private String money;
}

导出逻辑

/*** 导出文件逻辑*/
public void exportReport(List<Test> data) {    try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {final ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).withTemplate(ResourceUtil.getStream("/test/report.xlsx")).registerWriteHandler(buildCellWrite(data.size())).build();WriteSheet writeSheet = EasyExcel.writerSheet(0).build();// 将内容竖向填充FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).forceNewRow(false).build();excelWriter.fill(data, fillConfig, writeSheet);excelWriter.finish();// ... 根据流导出文件} catch (IOException e) {log.error("导出结存报表异常", e);}
}         /*** 处理单元格样式** @return CellWriteHandler* @author test* @date 2025-7-27 14:48:35*/private CellWriteHandler buildCellWrite(Integer column) {return new CellWriteHandler() {@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,Head head, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,List<CellData> cellDataList, Cell cell,Head head, Integer relativeRowIndex, Boolean isHead) {//当前行int curRowIndex = cell.getRowIndex();//当前列int curColIndex = cell.getColumnIndex();Workbook workbook = writeSheetHolder.getParentWriteWorkbookHolder().getWorkbook();// 合并第一行的内容if (curRowIndex == 0 && curColIndex == 0) {Sheet sheet;// 这里需要将格式SXSSWorkbook转为XSSFWorkbook否则获取到的row会为空if (workbook instanceof SXSSFWorkbook) {SXSSFWorkbook sxssfWorkbook = (SXSSFWorkbook) workbook;sheet = sxssfWorkbook.getXSSFWorkbook().getSheetAt(0);} else {sheet = workbook.getSheetAt(0);}writeSheetHolder.setSheetNo(0);CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, column);sheet.addMergedRegion(cellRangeAddress);final Row row = sheet.getRow(0);// 合并后手动设置一下几个格子的边框for (int i = 0; i <= column; i++) {Cell cellInfo = row.getCell(i);if (cellInfo == null) {cellInfo = row.createCell(i);}updateCellStyle(workbook, cellInfo, true);}} else {updateCellStyle(workbook, cell, false);}}};}/*** 设置某个格子的样式** @param workbook 工作簿* @param cell     格子*/private static void updateCellStyle(Workbook workbook, Cell cell, Boolean isHead) {CellStyle newCellStyle = workbook.createCellStyle();CellStyle cellStyle = cell.getCellStyle();BeanUtil.copyProperties(cellStyle, newCellStyle);Font font = workbook.createFont();if (isHead) {// 添加默认样式font.setColor(IndexedColors.BLACK.getIndex());newCellStyle.setWrapText(true);font.setBold(Boolean.TRUE);newCellStyle.setFont(font);}String fontName = "宋体";font.setFontName(fontName);newCellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());newCellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());newCellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());newCellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());newCellStyle.setBorderBottom(BorderStyle.THIN);newCellStyle.setBorderTop(BorderStyle.THIN);newCellStyle.setBorderLeft(BorderStyle.THIN);newCellStyle.setBorderRight(BorderStyle.THIN);// 单元格垂直对齐newCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);newCellStyle.setAlignment(HorizontalAlignment.LEFT);cell.setCellStyle(newCellStyle);}
http://www.dtcms.com/a/302047.html

相关文章:

  • QML QtCharts 极坐标图(PolarChartView)
  • 【WRF-Chem第二期】WRF-Chem有关 namelist 详解
  • 学习lxml库:Python XML/HTML处理利器
  • 安宝特方案丨智能革新安全管控:AR技术赋能物流仓储行业安全升级
  • C++中既重要又困难的部分—类和对象
  • Pandas 里的分箱操作
  • 《Linux服务与安全管理》| samba服务器配置匿名模式
  • 数据结构——图(二、图的存储和基本操作)
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • 设计模式(二十)行为型:观察者模式详解
  • 常用设计模式系列(十五)—解释器模式
  • 修改CentOS的SSH登录端口(22端口)
  • python任意模块间采用全局字典来实现借用其他类对象的方法函数来完成任务或数据通信的功能
  • STM32入门之DMA直接存储器存取
  • 第4章唯一ID生成器——4.3 基于时间戳的趋势递增的唯一ID
  • Java 排序
  • LeetCode 刷题【18. 四数之和】
  • Flutter实现Android原生相机拍照
  • 如何在技术世界中保持清醒和高效
  • iphone手机使用charles代理,chls.pro/ssl 后回车 提示浏览器打不开该网页
  • NI Ettus USRP X440 软件无线电
  • 免费 SSL 证书申请简明教程,让网站实现 HTTPS 访问
  • PyTorch 使用指南
  • 基于Spring Boot的审计日志自动化解决方案,结合SpEL表达式和AOP技术,实现操作轨迹自动记录,并满足GDPR合规要求
  • <七> CentOS 8 安装最新版本Docker
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • LWGJL教程(8)——基础知识
  • JavaScript手录-排序算法篇
  • UNet改进(26):UNet结合分层注意力机制的图像分割深度解析
  • socketpair函数详解