如何使用兴趣点去除合并区域?

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

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

快速回答

  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); } 

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

例如:如果将(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 

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

更多信息

如果你想得到一个特定的合并区域来分割它,你将不得不在你的循环中添加一个条件来标识它:

 // 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); } } 

我使用poi-3.12和从0到numberOfRegions的计数器不适用于我,但从sheet.getNumMergedRegions()到另一个方向工作。

要删除区域和复制值,这为我工作:

 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); } } } }