1.读取excel表格的一般逻辑
row.getCell(1).getStringCellValue()
如果单元格中没有数据,在getCell(1)时就会报空指针异常
2.poi3.17版本的源码中给出了两种获取单元格数据的方法,一个是单参数按照poi默认策略(RETURN_NULL_AND_BLANK)直接读取指定单元格,另一个是指定单元格并按定义的策略读取数据并做处理
public XSSFCell getCell(int cellnum) {
return this.getCell(cellnum, this._sheet.getWorkbook().getMissingCellPolicy());
}
public XSSFCell getCell(int cellnum, MissingCellPolicy policy) {
if (cellnum < 0) {
throw new IllegalArgumentException("Cell index must be >= 0");
} else {
Integer colI = new Integer(cellnum);
XSSFCell cell = (XSSFCell)this._cells.get(colI);
switch(policy) {
case RETURN_NULL_AND_BLANK:
return cell;
case RETURN_BLANK_AS_NULL:
boolean isBlank = cell != null && cell.getCellTypeEnum() == CellType.BLANK;
return isBlank ? null : cell;
case CREATE_NULL_AS_BLANK:
return cell == null ? this.createCell(cellnum, CellType.BLANK) : cell;
default:
throw new IllegalArgumentException("Illegal policy " + policy);
}
}
}
前两种策略都是对单元格进行直接操作,第三种策略(CREATE_NULL_AS_BLANK)是对没值的单元格进行非空处理(创建一个,其值为“”),使其不会报空指针异常,一般的介绍中都是以单参获取单元格数据的方法进行讲解,导致部分新手会在赋值过程中配合三目运算进行处理,造成代码冗余
3.非空判断处理的逻辑
row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue()
当前处理会按照poi中个人设置的处理策略进行处理,避免了不必要的代码量