[英]Read multiple rows indexed by a series of merged cells from Excel using Apache POI
合並區域中的所有單元格都顯示在電子表格XML中。 並且可以讀取行和單元格。 但是XML中缺少其單元格類型。 在POI中,單元格類型返回為Cell.CELL_TYPE_BLANK
。 盡管這可能是由其他原因引起的,所以僅尋找Cell.CELL_TYPE_BLANK
。 您還需要檢查單元格是否落在工作表中的合並區域之一內。 您可以這樣做:
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());
}
}
}
以獲取工作表中單元格中的值。 您可能需要處理數字或布爾單元,在我的示例中未顯示這些單元。
而您到底在掙扎什么呢? 如果您需要讀取合並單元格的內容,則可能需要檢查此線程 。 如果您的問題是“如何確定行中是否存在合並區域(例如,“檢查”-行),您將無法解決將某些“洞察”-邏輯放入解析器的過程,例如“ if col A =='檢查',然后讀取C列”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.