マージされた領域内のすべてのセルがスプレッドシートXMLに表示され、行とセルを読み取ることができます。セルタイプがCell.CELL_TYPE_BLANK
に戻りますが、これは他のものによって引き起こされる可能性がありますが、Cell.CELL_TYPE_BLANK
を探すだけでは不十分です。また、セルがシートのマージ領域の1つに含まれるかどうかを確認する必要があります。このように:
public static CellRangeAddress getMergedRegion(Cell cell) {
Sheet sheet = cell.getSheet();
for (CellRangeAddress range : sheet.getMergedRegions()) {
if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
return range;
}
}
return null;
}
セルを含むオブジェクトCellRangeAddress
またはnullが返されます。その後、シート内のセルの値を取得するために
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
CellRangeAddress range = getMergedRegion(cell);
if (range != null) {
Cell mergeValue = sheet.getRow(range.getFirstRow()).getCell(range.getFirstColumn());
System.out.println("Cell " + cell.getAddress() + ": " + "merged cell (" +
range.formatAsString() + ") " + mergeValue.getStringCellValue());
} else {
System.out.println("Cell " + cell.getAddress() + ": " + "blank");
}
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
System.out.println("Cell " + cell.getAddress() + ": " + cell.getStringCellValue());
}
}
}
を使用することができます。私の例では示されていない数値またはブール値のセルを処理する必要があるかもしれません。