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

SHi*_*Hiv 4 java api excel

我知道我们可以使用sheet.addMergedRegion(range)合并单元格.我想知道如何删除合并.

  1. 我们可以使用sheet.removeMergedRegion(int)
  2. 如果是,那么告诉我应该是什么论点
  3. 合并单元格中存在的数据会发生什么.

小智 5

快速回答

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

说明

您可以使用sheet.getMergedRegion(i)获取合并区域,其中i是工作表中的标识符.

/* ... 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);
}
Run Code Online (Sandbox Code Playgroud)

当你做这样的事情时,合并区域的内容将保留在该区域的第一个单元格中(左上角).其他单元格将具有空白内容.

示例: 如果(A1和A2)与内容"合并区域"合并,则拆分的结果将为(A2)为空,(A1)为内容"合并区域".

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

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
Run Code Online (Sandbox Code Playgroud)

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

更多信息

如果要获取特定的合并区域以将其拆分,则必须在循环中添加条件以识别它:

// 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);
    }
}
Run Code Online (Sandbox Code Playgroud)