使用Apache POI从Excel中读取由一系列合并单元格索引的多行

我正在尝试使用Apache POI读取Excel文件。 我的问题是试图读取一系列的行作为一个合并单元格,考虑到这个合并包含的行数是任意的。

这张照片

在这里输入图像说明

可能是一个适当的例子,我希望。 在这种情况下,我不能拿出一个函数来通过属性的所有行,并停止当我到达外键行。 合并单元格中的“属性”string包含在合并单元格的第一行中。

谢谢您的帮助!

合并区域中的所有单元格都显示在电子表格XML中。 并可以读取行和单元格。 但是他们的单元格types在XML中丢失了。 在POI中,单元格types返回为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()); } } } 

获取表单中的单元格中的值。 您可能需要处理数字或布尔单元格,这些不在我的示例中显示。

你到底在干什么? 如果您需要阅读合并单元格的内容,则可能需要检查此线程 。 如果你的问题是“如何确定行中有一个合并区域(比如你的”Checks“–Row),那么你就不会在parsing器中join某种”洞察力“ – 例如”if col A =='检查',然后阅读col C“