Apache POI读合并单元格

时间:2021-06-23 06:15:19

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/77193464,建议读者阅读原文,确保获得完整的信息

场景

  利用Apache POI读合并单元格。

Apache POI读合并单元格

实现

  单元格在POI中的对象是CellRangeAddress,它包含了单元格左上角、右下角的方位。要读单个cell的值,首先需要判断它是否处在某个单元格中,如果是再去读单元格左上方那个单元格的值就是你要获取的值。
  如果有更优的方法,欢迎交流。

    /**
* 判断单元格是否是合并单元格
* @param listCombineCell 合并单元格列表
* @param cell cell
* @return boolean
*/

private boolean isCombineCell(List<CellRangeAddress> listCombineCell, XSSFCell cell){
int firstC;
int lastC;
int firstR;
int lastR;
for (CellRangeAddress ca : listCombineCell) {
// 获得合并单元格的起始行, 结束行, 起始列, 结束列
firstC = ca.getFirstColumn();
lastC = ca.getLastColumn();
firstR = ca.getFirstRow();
lastR = ca.getLastRow();
if (cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR) {
if (cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC) {
return true;
}
}
}
return false;
}

/**
* 读合并单元格值
* @param sheet 表格
* @param cell cell
* @return value
*/

private String getMergedCellValue(XSSFSheet sheet, XSSFCell cell){
int firstC;
int lastC;
int firstR;
int lastR;
String value = "";
List<CellRangeAddress> listCombineCell = sheet.getMergedRegions();
for (CellRangeAddress ca : listCombineCell) {
// 获得合并单元格的起始行, 结束行, 起始列, 结束列
firstC = ca.getFirstColumn();
lastC = ca.getLastColumn();
firstR = ca.getFirstRow();
lastR = ca.getLastRow();
if (cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR) {
if (cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC) {
// 获取合并单元格左上角单元格值
XSSFRow fRow = sheet.getRow(firstR);
XSSFCell fCell = fRow.getCell(firstC);
value = getCellValue(fCell);
}
}
}
return value;
}

读取结果

Function
Gap Analysis
Item ID
15.0
查询
查询用户信息
31.0
更新
更新用户信息
30.0
新增
新增用户信息
19.0
新增
新增用户信息
19.0
删除
删除