From 86892d5963dbbe9c8c96294994601b29ab1a65bd Mon Sep 17 00:00:00 2001 From: dr5hx <1165372212@qq.com> Date: Thu, 18 Dec 2025 15:24:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(excel):=20=E5=A2=9E=E5=BC=BA=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E5=90=88=E5=B9=B6=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增支持自定义行索引的构造函数 - 添加防止同行重复合并的判断逻辑 - 提供静态工厂方法用于创建合并处理器实例 - 扩展合并策略以支持指定起始行索引 --- .../common/excel/core/CellMergeHandler.java | 19 ++++++++++++++++++- .../common/excel/core/CellMergeStrategy.java | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeHandler.java index 1a0601479..6a1a3a72d 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeHandler.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeHandler.java @@ -29,7 +29,10 @@ public class CellMergeHandler { // 行合并开始下标 this.rowIndex = hasTitle ? 1 : 0; } - + private CellMergeHandler(final boolean hasTitle, final int rowIndex) { + this.hasTitle = hasTitle; + this.rowIndex = hasTitle ? rowIndex : 0; + } @SneakyThrows public List handle(List rows) { // 如果入参为空集合则返回空集 @@ -103,6 +106,10 @@ public class CellMergeHandler { } if (isAddResult && i > current) { + //如果是同一行,则跳过合并 + if (current + rowIndex == lastRow) { + continue; + } result.add(new CellRangeAddress(current + rowIndex, lastRow, colNum, colNum)); } } @@ -177,6 +184,16 @@ public class CellMergeHandler { return new FieldColumnIndex(colIndex, cellMerge); } } + /** + * 创建一个单元格合并处理器实例 + * + * @param hasTitle 是否合并标题 + * @param rowIndex 行索引 + * @return 单元格合并处理器 + */ + public static CellMergeHandler of(final boolean hasTitle, final int rowIndex) { + return new CellMergeHandler(hasTitle, rowIndex); + } /** * 创建一个单元格合并处理器实例 diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeStrategy.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeStrategy.java index 5576c6383..64d8c7779 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeStrategy.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/CellMergeStrategy.java @@ -31,6 +31,10 @@ public class CellMergeStrategy extends AbstractMergeStrategy implements SheetWri this.cellList = CellMergeHandler.of(hasTitle).handle(list); } + public CellMergeStrategy(List list, boolean hasTitle, int rowIndex) { + this.cellList = CellMergeHandler.of(hasTitle, rowIndex).handle(list); + } + @Override protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { if (CollUtil.isEmpty(cellList)) {