POI Cannot add merged region XXX to sheet because it overlaps with an existing merged region问题解决

2023-05-16

问题描述:

java.lang.IllegalStateException: Cannot add merged region A1:B2 to sheet because it overlaps with an existing merged region (A1:C3).

问题分析:

1、使用POI的sheet.addMergedRegion()添加合并单元格信息方法,要合并的区域已经存在合并单元格,导致报错。

CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 2);
sheet.addMergedRegionUnsafe(cellRangeAddress);
int startRowIndex = 0;
int endRowIndex = 1;
int startColIndex = 0;
int endColIndex = 1;
sheet.addMergedRegion(new CellRangeAddress(startRowIndex, endRowIndex, startColIndex, endColIndex));

问题解决:添加合并单元格信息时,先判断是否和已有的合并单元格重合。

CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 2);
sheet.addMergedRegionUnsafe(cellRangeAddress);
int startRowIndex = 0;
int endRowIndex = 1;
int startColIndex = 0;
int endColIndex = 1;
List<CellRangeAddress> cellRangeAddressList = sheet.getMergedRegions();
List<CellRangeAddress> haveCellRangeAddressList = CollUtil.isNotEmpty(cellRangeAddressList) ? cellRangeAddressList.stream().filter(x ->
    ScopeUtil.isIntersection(x.getFirstColumn(), x.getLastColumn(), startColIndex, endColIndex)
    && ScopeUtil.isIntersection(x.getFirstRow(), x.getLastRow(), startRowIndex, endRowIndex)).collect(Collectors.toList()) : new ArrayList<>();
if (CollUtil.isEmpty(haveCellRangeAddressList)) {
    sheet.addMergedRegion(new CellRangeAddress(startRowIndex, endRowIndex, startColIndex, endColIndex));
}

注:

源码请查看Gitee。

xudongbase: 主要是项目中可以用到的共通方法https://gitee.com/xudong_master/xudongbase

旭东怪的个人空间-旭东怪个人主页-哔哩哔哩视频哔哩哔哩旭东怪的个人空间,提供旭东怪分享的视频、音频、文章、动态、收藏等内容,关注旭东怪账号,第一时间了解UP注动态。人生低谷不可怕,可怕的是坚持不到人生转折点的那一天https://space.bilibili.com/484264966?spm_id_from=333.1007.0.0 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POI Cannot add merged region XXX to sheet because it overlaps with an existing merged region问题解决 的相关文章

随机推荐