使用Apache POI合并Excel单元格报错:无法添加重复合并区域G5:G6
解决方法
1. 检查原始Excel文件状态
错误提示明确说明G5:G6已经是合并区域。先打开你的原始Excel文件,确认G5和G6是否已被合并。如果已经合并,无需在代码中重复执行合并操作。
2. 避免重复添加合并区域
如果需要通过代码确保该区域合并,需解决重复执行的问题:
- 将
sheets.addMergedRegion(new CellRangeAddress(4,5,6,6))移出行循环(for (int rowNum = 4; ...)),放到Sheet处理的外层,每个Sheet仅执行一次。 - 添加前先校验区域是否已存在,防止重复添加:
// 定义目标合并区域 CellRangeAddress targetRegion = new CellRangeAddress(4, 5, 6, 6); boolean regionExists = false; // 遍历现有合并区域,检查是否重复 for (int i = 0; i < sheets.getNumMergedRegions(); i++) { CellRangeAddress existingRegion = sheets.getMergedRegion(i); if (existingRegion.equals(targetRegion)) { regionExists = true; break; } } // 仅当区域不存在时执行添加 if (!regionExists) { sheets.addMergedRegion(targetRegion); }
3. 排查代码中其他合并操作
检查代码的其他部分,确认是否有其他地方调用addMergedRegion处理G5:G6区域,导致重复添加。
修正后的代码示例
调整合并操作的位置,避免循环重复执行:
for (String cellLLL : sheetNumd) { XSSFSheet sheets = workbook.getSheet(cellLLL); if (sheets != null) { // 合并区域处理:放在行循环外,每个Sheet仅执行一次 CellRangeAddress targetRegion = new CellRangeAddress(4, 5, 6, 6); boolean regionExists = false; for (int i = 0; i < sheets.getNumMergedRegions(); i++) { if (sheets.getMergedRegion(i).equals(targetRegion)) { regionExists = true; break; } } if (!regionExists) { sheets.addMergedRegion(targetRegion); } // 行遍历逻辑 for (int rowNum = 4; rowNum < sheets.getLastRowNum() + 1; rowNum++) { Row row = sheets.getRow(rowNum); if (row != null) { for (Cell cell : row) { int columnIndex = cell.getColumnIndex(); switch (columnIndex) { case 6: cellValue6 = cell.getStringCellValue(); break; } } } if (cellLLL.equals("Sheet1")) { list6.add(cellValue6); } } } }
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

