转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/77193464,建议读者阅读原文,确保获得完整的信息
场景
利用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
删除
删除