Из HSSFRow#cellIterator
JavaDoc:
Обратите внимание, что 4-й элемент вполне может быть не ячейкой 4, поскольку итератор не будет возвращать неопределенные (нулевые) ячейки.Вызовите getCellNum () для возвращенных ячеек, чтобы узнать, к какой ячейке они относятся.
Это означает, что вам нужно сохранить текущий и последний номер ячейки, и если вы получите разницу больше 1, у вас будет пустое/ неопределенные ячейки между ними, т.е. что-то вроде int numBlankCells = (curCellNum - lastCellNum) - 1;
Другой подход может быть:
short minColIndex = row.getFirstCellNum();
short maxColIndex = row.getLastCellNum();
for(short colIndex = minColIndex; colIndex < maxColIndex; colIndexx++) {
HSSFCell cell = row.getCell(colIndex);
if(cell == null) {
//blank/undefined cell
}
else {
//defined cell which still could be of type HSSFCell.CELL_TYPE_BLANK or contain an empty string
}
}