Browse Source

!811 feat(excel): 增强单元格合并处理逻辑
* feat(excel): 增强单元格合并处理逻辑

dr5hx 6 tháng trước cách đây
mục cha
commit
8a04e3c88f

+ 18 - 1
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<CellRangeAddress> 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);
+    }
 
     /**
      * 创建一个单元格合并处理器实例

+ 4 - 0
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)) {