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

时间:2015-08-17 08:10:03

标签: java apache-poi

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

有没有办法在不使用Apache POI创建新工作表的情况下取消合并工作表的单元格?

3 个答案:

答案 0 :(得分:4)

宣传回答评论......

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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);
    }
}