问题描述:
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