首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用POI删除合并区域?

如何使用POI删除合并区域?
EN

Stack Overflow用户
提问于 2014-04-09 10:55:18
回答 3查看 10.2K关注 0票数 4

我知道我们可以用sheet.addMergedRegion(范围)合并细胞。我想知道如何删除合并。

  1. 我们可以使用sheet.removeMergedRegion(int)吗?
  2. 如果是的话,那就告诉我该争论什么。
  3. 合并后的单元格中的数据将发生什么变化。
EN

回答 3

Stack Overflow用户

发布于 2014-08-05 17:11:43

快速回答

  1. 表中合并区域的id。
  2. 数据保存在区域的第一个单元格中,其他单元格将为空。

解释

您可以获得与sheet.getMergedRegion(i)合并的区域,其中I是工作表中的标识符。

代码语言:javascript
复制
/* ... initialize your workbook and sheet here ... */

// Loop through every merged region in the sheet
for(int i=0; i < sheet.getNumMergedRegions(); ++i)
{
    // Delete the region
    sheet.removeMergedRegion(i);
}

当您这样做时,合并区域的内容将保存在该区域的第一个单元格中(左上角)。其他单元格将有一个空内容。

示例:如果您已经(A1和A2)与内容“合并区域”合并,则拆分的结果将是(A2)空,(A1)与内容“合并区域”。

请注意,这是内部存储数据的方式,即使您试图获取包含在合并区域中的单元格的值。保持相同的示例,您将拥有:

代码语言:javascript
复制
CellReference ref = new CellReference("A1");
Row row = sheet.getRow( ref.getRow() );
Cell cell = row.getCell( ref.getCol() );
System.out.println( new DataFormatter().formatCellValue(cell) ); // Will print "merged region"

ref = new CellReference("A2");
row = sheet.getRow( ref.getRow() );
cell = row.getCell( ref.getCol() );
System.out.println( new DataFormatter().formatCellValue(cell) ); // Will print empty string

这将是删除合并区域之前和之后的相同行为。

更多信息

如果您想要获得一个特定的合并区域来分割它,则必须在循环中添加一个条件来标识它:

代码语言:javascript
复制
// If we want to split the merged cell starting at D3
CellReference ref = new CellReference("D3");

for(int i=0; i < sheet.getNumMergedRegions(); ++i)
{
    CellRangeAddress range = sheet.getMergedRegion(i);

    if ( range.getFirstRow() == ref.getRow() && range.getLastRow() == ref.getCol() )
    {
        sheet.removeMergedRegion(i);
    }
}
票数 7
EN

Stack Overflow用户

发布于 2015-10-06 17:55:48

我使用poi-3.12和从0到numberOfRegions的计数器对我不起作用,但从sheet.getNumMergedRegions()到0的相反方向工作。

要删除区域并复制值,这对我来说是有效的:

代码语言:javascript
复制
for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
            CellRangeAddress region = sheet.getMergedRegion(i);
            Row firstRow = sheet.getRow(region.getFirstRow());
            Cell firstCellOfFirstRow = firstRow.getCell(region.getFirstColumn());

            if (firstCellOfFirstRow.getCellType() == Cell.CELL_TYPE_STRING) {
                value = firstCellOfFirstRow.getStringCellValue();
            }

            sheet.removeMergedRegion(i);

            for (Row row : sheet) {
                for (Cell cell : row) {
                    if (region.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        cell.setCellValue(value);
                    }
                }
            }

        }
票数 3
EN

Stack Overflow用户

发布于 2022-11-21 08:17:57

很长一段时间以来我一直在寻找选择。这是我的工作。这将移除工作表上的所有区域。

代码语言:javascript
复制
 while (sheet.getNumMergedRegions() > 0) {
        sheet.removeMergedRegion(0);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22960368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档