maven
9 天以前 487bbcd45afcc288c27784962d3b40d5015bcd12
src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java
@@ -843,18 +843,47 @@
                } else {
                    merge = false;
                    if (x1 > 0) {
                        sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y));
                        // 检查是否与现有合并区域重叠,如果有则删除旧区域,再合并新区域
                        CellRangeAddress newRegion = new CellRangeAddress((x1 - 1), x2, y, y);
                        handleOverlappingRegions(sheet, newRegion);
                    }
                    x1 = 0;
                    x2 = 0;
                }
            }
            if (x1 > 0) {
                sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y));
                // 检查是否与现有合并区域重叠,如果有则删除旧区域,再合并新区域
                CellRangeAddress newRegion = new CellRangeAddress((x1 - 1), x2, y, y);
                handleOverlappingRegions(sheet, newRegion);
            }
        }
    }
    /**
     * 检查是否与现有合并区域重叠,如果有则删除旧区域,再合并新区域
     * @param sheet Excel工作表
     * @param newRegion 新的合并区域
     */
    private static void handleOverlappingRegions(Sheet sheet, CellRangeAddress newRegion) {
        // 移除重叠的现有区域
        List<CellRangeAddress> overlappingRegions = new ArrayList<>();
        for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
            CellRangeAddress existingRegion = sheet.getMergedRegion(i);
            if (newRegion.intersects(existingRegion)) {
                overlappingRegions.add(existingRegion);
                sheet.removeMergedRegion(i);
            }
        }
        // 合并到新区域(这里简单地将它们添加到新的合并区域列表中,实际应用中可能需要更复杂的逻辑来真正“合并”区域)
        // 注意:POI的CellRangeAddress没有提供直接合并两个区域的方法,所以这里只是示例
        // 如果需要真正的合并,可能需要自定义逻辑来计算新的边界
        for (CellRangeAddress overlappingRegion : overlappingRegions) {
            sheet.addMergedRegion(overlappingRegion);
        }
        sheet.addMergedRegion(newRegion);
    }
    private static void write(HttpServletResponse response, SXSSFWorkbook book, String fileName) throws IOException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");