diff --git a/README.md b/README.md
index 96dc4ca5e..364615dbb 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
> 系统演示: [传送门](https://plus-doc.dromara.org/#/common/demo_system)
> 官方前端项目地址: [gitee](https://gitee.com/JavaLionLi/plus-ui) - [github](https://github.com/JavaLionLi/plus-ui) - [gitcode](https://gitcode.com/dromara/plus-ui)
-> 成员前端项目地址: 基于vben5 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)
+> 成员前端项目地址: 基于vben5 [ruoyi-plus-vben5](https://github.com/imdap/ruoyi-plus-vben5)
> 成员前端项目地址: 基于soybean [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean)
> 成员项目地址: 删除多租户与工作流 [RuoYi-Vue-Plus-Single](https://gitee.com/ColorDreams/RuoYi-Vue-Plus-Single)
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 215b022b6..694c16462 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
@@ -64,8 +64,10 @@ public class CellMergeHandler {
// 当前行数据字段值
Object currentRowObjFieldVal = ReflectUtils.invokeGetter(currentRowObj, field.getName());
- // 空值跳过不处理
- if (currentRowObjFieldVal == null || "".equals(currentRowObjFieldVal)) {
+ // 空值视为合并中断,需要先收口上一段合并区间
+ if (isBlankCell(currentRowObjFieldVal)) {
+ appendMergeResult(result, rowRepeatCellMap.get(field), i - 1, colNum);
+ rowRepeatCellMap.remove(field);
continue;
}
@@ -78,7 +80,6 @@ public class CellMergeHandler {
// 获取 单元格合并Map 中字段值
RepeatCell repeatCell = rowRepeatCellMap.get(field);
Object cellValue = repeatCell.value();
- int current = repeatCell.current();
// 检查是否满足合并条件
// currentRowObj 当前行数据
@@ -86,33 +87,14 @@ public class CellMergeHandler {
// cellMerge 当前行字段合并注解
boolean merge = isMerge(currentRowObj, rows.get(i - 1), cellMerge);
- // 是否添加到结果集
- boolean isAddResult = false;
- // 最新行
- int lastRow = i + rowIndex - 1;
-
// 如果当前行字段值和缓存中的字段值不相等,或不满足合并条件,则替换
if (!currentRowObjFieldVal.equals(cellValue) || !merge) {
+ appendMergeResult(result, repeatCell, i - 1, colNum);
rowRepeatCellMap.put(field, RepeatCell.of(currentRowObjFieldVal, i));
- isAddResult = true;
- }
-
- // 如果最后一行不能合并,检查之前的数据是否需要合并;如果最后一行可以合并,则直接合并到最后
- if (i == rows.size() - 1) {
- isAddResult = true;
- if (i > current) {
- lastRow = i + rowIndex;
- }
- }
-
- if (isAddResult && i > current) {
- //如果是同一行,则跳过合并
- if (current + rowIndex == lastRow) {
- continue;
- }
- result.add(new CellRangeAddress(current + rowIndex, lastRow, colNum, colNum));
}
}
+ appendMergeResult(result, rowRepeatCellMap.get(field), rows.size() - 1, colNum);
+ rowRepeatCellMap.remove(field);
}
return result;
}
@@ -167,6 +149,17 @@ public class CellMergeHandler {
return true;
}
+ private boolean isBlankCell(Object value) {
+ return value == null || StrUtil.isBlankIfStr(value);
+ }
+
+ private void appendMergeResult(List result, RepeatCell repeatCell, int endIndex, int colNum) {
+ if (repeatCell == null || endIndex <= repeatCell.current()) {
+ return;
+ }
+ result.add(new CellRangeAddress(repeatCell.current() + rowIndex, endIndex + rowIndex, colNum, colNum));
+ }
+
/**
* 单元格合并
*/