如何使用 apache POI java 库取消合并电子表格中的单元格

How to unmerge cells in a spreadsheet using apache POI java library

我们可以使用 sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo); 在 sheet 中添加合并的单元格,但我已经有一个 sheet 其中包含合并的单元格,我想取消合并这些单元格。

有没有什么方法可以在不使用 Apache POI 创建新的 sheet 的情况下取消合并 sheet 的单元格?

正在将评论提升为答案...

你想要的方法是Sheet.removeMergedRegion(int)

这会获取您在添加区域时获得的区域索引。否则,您可以使用 getNumMergedRegions() and getMergedRegion(int) 遍历区域以找到要删除的区域的索引

我刚刚发现在每个区域方法之后都会在内部检查现有区域的数量。例如。删除区域 1 后,所有内容都是新计算的,例如大小为 previousSize-1 并且 sheet.getNumMergedRegions() 也少了一个。所以对我来说,我将所有区域添加到列表中并从 sheet 中删除它们。我总是使用 id 0,因为每次都会重新计算 id。

for(int i = 0; i<numOfRegion;i++)
        {
            regions.add(sheet.getMergedRegion(0));
            sheet.removeMergedRegion(0);
        }

出于某种原因,以下代码没有立即删除所有合并区域:

logger.info("Number of merged regions = " + sheet.getNumMergedRegions());
for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
    logger.info("Removing merged region " + (i + 1));
    sheet.removeMergedRegion(i);
}
logger.info("\nNumber of merged regions = " + sheet.getNumMergedRegions());

在控制台中我看到了这个:

Number of merged regions = 7
Removing merged region 1
Removing merged region 2
Removing merged region 3
Removing merged region 4

Number of merged regions = 3

修复:

while (sheet.getNumMergedRegions() > 0) {
    logger.info("Number of merged regions = " + sheet.getNumMergedRegions());
    for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
        logger.info("Removing merged region " + (i + 1));
        sheet.removeMergedRegion(i);
    }
}