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

EasyExcel 格式设置大全

EasyExcel 是阿里巴巴开源的基于 POI 的 Excel 处理工具,虽然以简单易用和大数据量处理著称,但也提供了丰富的格式设置功能。以下是 EasyExcel 格式设置的全面指南:


1. 基础格式设置

1.1 单元格样式设置

// 创建样式配置
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 设置背景色
headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
// 设置字体
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short)12);
headWriteFont.setBold(true);
headWriteFont.setColor(IndexedColors.WHITE.getIndex());
headWriteCellStyle.setWriteFont(headWriteFont);
// 设置边框
headWriteCellStyle.setBorderLeft(BorderStyle.THIN);
headWriteCellStyle.setBorderRight(BorderStyle.THIN);
headWriteCellStyle.setBorderTop(BorderStyle.THIN);
headWriteCellStyle.setBorderBottom(BorderStyle.THIN);// 应用到表头
HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

1.2 内容样式设置

WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 设置内容水平居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置内容垂直居中
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 设置自动换行
contentWriteCellStyle.setWrapped(true);

2. 高级格式设置

2.1 自定义样式策略

public class CustomStyleStrategy extends AbstractHorizontalCellStyleStrategy {@Overrideprotected WriteCellStyle headCellStyle(Head head) {// 自定义表头样式WriteCellStyle style = new WriteCellStyle();style.setFillForegroundColor(IndexedColors.BLUE.getIndex());return style;}@Overrideprotected WriteCellStyle contentCellStyle(WriteSheetHolder writeSheetHolder) {// 自定义内容样式WriteCellStyle style = new WriteCellStyle();style.setFillPatternType(FillPatternType.SOLID_FOREGROUND);return style;}
}

2.2 条件格式设置

// 使用拦截器实现条件格式
public class CustomCellWriteHandler implements CellWriteHandler {@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {if (!isHead && cell.getColumnIndex() == 2) {// 对第三列设置特殊格式CellStyle cellStyle = writeSheetHolder.getSheet().getWorkbook().createCellStyle();cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell.setCellStyle(cellStyle);}}
}

3. 数字格式设置

3.1 设置数字格式

WriteCellStyle numberStyle = new WriteCellStyle();
// 设置数字格式为保留两位小数
numberStyle.setDataFormat((short)4);  // 0.00格式// 应用到特定列
Map<Integer, WriteCellStyle> styleMap = new HashMap<>();
styleMap.put(2, numberStyle);  // 第三列应用此样式HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle, styleMap);

3.2 自定义数字格式

// 创建自定义数据格式
Workbook workbook = new SXSSFWorkbook();
short format = workbook.createDataFormat().getFormat("#,##0.00_);[Red](#,##0.00)");WriteCellStyle style = new WriteCellStyle();
style.setDataFormat(format);

4. 字体设置

4.1 基本字体设置

WriteFont font = new WriteFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short)14);
font.setBold(true);
font.setColor(IndexedColors.RED.getIndex());
font.setItalic(true);
font.setUnderline(Font.U_SINGLE);WriteCellStyle style = new WriteCellStyle();
style.setWriteFont(font);

4.2 多行表头字体设置

// 复杂表头样式
WriteCellStyle headStyle = new WriteCellStyle();
WriteFont headFont = new WriteFont();
headFont.setFontHeightInPoints((short)10);
headStyle.setWriteFont(headFont);// 使用注解设置表头
@ExcelProperty(value = {"主标题", "次标题"})
private String name;

5. 行高和列宽设置

5.1 设置行高

// 通过拦截器设置行高
public class CustomRowWriteHandler implements RowWriteHandler {@Overridepublic void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {if (isHead) {row.setHeightInPoints(30);  // 表头行高30} else {row.setHeightInPoints(20);  // 内容行高20}}
}

5.2 设置列宽

// 通过拦截器设置列宽
public class CustomSheetWriteHandler implements SheetWriteHandler {@Overridepublic void afterSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) {Sheet sheet = writeSheetHolder.getSheet();// 设置第一列宽度sheet.setColumnWidth(0, 5000);// 设置第二列自动调整宽度sheet.autoSizeColumn(1);}
}

6. 合并单元格

// 使用拦截器合并单元格
public class CustomMergeStrategy implements CellWriteHandler {@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {// 合并第一行的1-3列if (isHead && cell.getRowIndex() == 0 && cell.getColumnIndex() == 0) {Sheet sheet = writeSheetHolder.getSheet();CellRangeAddress region = new CellRangeAddress(0, 0, 0, 2);sheet.addMergedRegion(region);}}
}

7. 边框设置

WriteCellStyle style = new WriteCellStyle();
// 设置细边框
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);// 设置边框颜色
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
style.setRightBorderColor(IndexedColors.BLACK.getIndex());

8. 实际应用示例

// 完整导出示例
public void exportWithStyle(HttpServletResponse response) throws IOException {// 准备数据List<User> users = getUsers();// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition", "attachment;filename=users.xlsx");// 表头样式WriteCellStyle headWriteCellStyle = new WriteCellStyle();headWriteCellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)12);headWriteFont.setColor(IndexedColors.WHITE.getIndex());headWriteCellStyle.setWriteFont(headWriteFont);// 内容样式WriteCellStyle contentWriteCellStyle = new WriteCellStyle();contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 数字列特殊样式WriteCellStyle numberStyle = new WriteCellStyle();numberStyle.setDataFormat((short)4);Map<Integer, WriteCellStyle> styleMap = new HashMap<>();styleMap.put(2, numberStyle);  // 第三列是数字// 构建样式策略HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle, styleMap);// 导出EasyExcel.write(response.getOutputStream(), User.class).registerWriteHandler(styleStrategy).registerWriteHandler(new CustomRowWriteHandler())  // 行高.registerWriteHandler(new CustomSheetWriteHandler())  // 列宽.registerWriteHandler(new CustomMergeStrategy())  // 合并单元格.sheet("用户列表").doWrite(users);
}

9. 常见问题

  1. 样式不生效:

    • 确保正确注册了样式策略

    • 检查样式设置的优先级

    • 确认没有其他拦截器覆盖了样式

  2. 性能问题:

    • 避免在循环中创建样式对象

    • 重用样式对象

    • 对于大数据量,考虑使用 SXSSF 模式

  3. 格式兼容性:

    • 某些复杂格式可能在旧版 Excel 中不兼容

    • 测试不同 Excel 版本的兼容性

EasyExcel 的格式设置虽然不如原生 POI 那样细致,但对于大多数业务场景已经足够,且在大数据量处理上有明显优势。

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

相关文章:

  • LangChain详解
  • OpenShift AI - 用 Hardware profiles 为运行环境分配可用的硬件规格
  • Windows和Linux的tree工具
  • 移动端 WebView 内存泄漏与性能退化问题如何排查 实战调试方法汇总
  • 【数据结构与算法】21.合并两个有序链表(LeetCode)
  • (28)运动目标检测之随机曲线上的离散点进行插值
  • 【MySQL索引失效场景】索引失效原因及最左前缀原则详解
  • 【C语言】字符函数与字符串函数详解
  • 数据结构(11)栈和队列算法题 OVA
  • dify 升级1.7.1 插件无法下载依赖
  • [VL|RIS] ReferSAM
  • 11.Layout-Pinia优化重复请求
  • 使用 whisper, 音频分割, 初步尝试,切割为小块,效果还不错 1
  • [ Leetcode ]---快乐数
  • [lvgl_player] 用户界面(LVGL) | 播放器核心设计
  • 8.1每日一题
  • Vue 3 入门教程 8 - 路由管理 Vue Router
  • 使用GPU和NPU视频生成的优劣对比
  • Windows系统优化命令-记录
  • 面向对象学习(一)
  • 【Linux我做主】细说环境变量
  • Vue2 项目实现 Gzip 压缩全攻略:从配置到部署避坑指南
  • IIS 让asp.net core 项目一直运行
  • TwinCAT3编程入门2
  • 第k小整数(快排)
  • 如何理解卷积,和自注意力机制的局限与优势(个人理解)
  • 倒计时!2025国自然放榜时间锁定
  • 使用Nginx部署前端项目
  • 【Linux】磁盘存储+文件系统简介
  • 开箱即用的Next.js SSR企业级开发模板