EasyExcel导出自定义列,合并列,合并行,动态表格表头

您所在的位置:网站首页 excel两行多列合并成一行多列 EasyExcel导出自定义列,合并列,合并行,动态表格表头

EasyExcel导出自定义列,合并列,合并行,动态表格表头

2024-07-07 20:55| 来源: 网络整理| 查看: 265

全部代码已经粘贴本文,直接复制到自己路径下, 各位CRUD的大神们把引用路径改一下即可 package com.springboot.cli.controller; import com.springboot.cli.domain.TestDynamicModel; import com.springboot.cli.handler.ExcelRowMergeHandler; import com.springboot.cli.handler.ExcelColumnMergeHandler; import com.springboot.cli.utils.EasyExcelUtils;

详细的工具类可以参照使用案例进行模仿。 主要是解决一些EasyExcel原生功能的缺陷,不过EasyExcel可以注入事件处理器,来扩展更复杂的操作,

EasyExcel工具类

exportExcelInclude:按指定顺序/默认顺序导出writeDynamicExcel: 动态列导出(支持行列合并)

动态表格行合并列合并样式 动态表格行合并列合并

Excel事件处理器:(代码注释中有详细使用的描述) 主要是做一些特殊的操作(行列合并,列顺序排序)

ExcelColumnMergeHandlerExcelRowMergeHandlerSortRowWriteHandler

POM依赖

com.alibaba fastjson 1.2.75 cn.hutool hutool-all 5.8.0.M2 com.alibaba easyexcel 2.2.10 com.google.guava guava 27.0.1-jre org.springframework.boot spring-boot-starter-validation

使用案例教学

package com.springboot.cli.controller; import com.springboot.cli.domain.TestDynamicModel; import com.springboot.cli.handler.ExcelRowMergeHandler; import com.springboot.cli.handler.ExcelColumnMergeHandler; import com.springboot.cli.utils.EasyExcelUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * 动态表头测试案例 * */ @Slf4j @RestController @RequestMapping("/TestDynamicHeadWriteController") public class TestDynamicHeadWriteController { /** * 动态头,实时生成头写入 * 思路是这样子的,先创建List头格式的sheet仅仅写入头,然后通过table 不写入头的方式 去写入数据 * * 表格样式: * * 合计 合计 日期 日期 日期 日期 日期 日期 日期 日期 * 名称 分数 日期 日期 日期 日期 日期 日期 日期 日期 * 二梦 10 0 1 2 3 4 5 6 7 * 二梦 10 0 1 2 3 4 5 6 7 * 小计 小计 0 1 2 3 4 5 6 7 * 黑妮 10 0 1 2 3 4 5 6 7 * 黑妮 10 0 1 2 3 4 5 6 7 * 黑妮 10 0 1 2 3 4 5 6 7 * 小计 小计 0 1 2 3 4 5 6 7 * 老王 10 0 1 2 3 4 5 6 7 * 老王 10 0 1 2 3 4 5 6 7 * 老王 10 0 1 2 3 4 5 6 7 * 老王 10 0 1 2 3 4 5 6 7 * 小计 小计 0 1 2 3 4 5 6 7 * */ @PostMapping("dynamicHeadWrite") public void dynamicHeadWrite(HttpServletResponse response) throws IOException { /*如果需要本地目录生成:改为“EasyExcel.write(fileName)”就可以了。*/ String fileName = "C:\\Users\\Administrator\\Downloads\\" + "fileExcel" + System.currentTimeMillis() + ".xlsx"; String name = "webExcel"+System.currentTimeMillis(); /*web下载*/ /*定义编码,格式*/ response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String exportFileName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + exportFileName + ".xlsx"); response.setHeader("filename", exportFileName + ".xlsx"); response.setHeader("Access-Control-Expose-Headers", "filename"); /*生成测试数据*/ List data = dataTemp(); /*数据转换为List*/ List dataList = convertToListListObj(data); /*通过自定义处理行合并*/ ExcelRowMergeHandler colMerge = getColMerge(dataList); /*写入表格*/ //EasyExcelUtils.writeDynamicExcel(response, head(),dataList); /* * 写入表格 * 如果需要自定义行合并,自定义列合并 * */ EasyExcelUtils.writeDynamicExcel(response,head(), dataList,new ExcelColumnMergeHandler(1, new int[]{0,1}),colMerge); } /** * 通过自定义处理行合并 * * @param list 加油卡消费汇总数据 * @return 行合并处理器 */ private ExcelRowMergeHandler getColMerge(List list) { /*创建列合并工具类对象*/ ExcelRowMergeHandler mergePrevCol = new ExcelRowMergeHandler(); /*动态合并*/ for (int i = 0 ; i e)); int index = 0; for (String includeColumnFieldName : includeColumnFieldNames) { if (isHead) { // 按照includeColumnFieldNames中的顺序取出head重新覆盖 Head head = fieldNameHead.get(includeColumnFieldName); if (head == null) { continue; } headMap.put(index, head); } else { // 按照includeColumnFieldNames中的顺序取出fieldNameColumnFiled重新覆盖 ExcelContentProperty contentProperty = fieldNameColumnFiled.get(includeColumnFieldName); if (contentProperty == null) { continue; } contentPropertyMap.put(index,contentProperty); } index++; } } @Override public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { } @Override public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3