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)); + } + /** * 单元格合并 */