Возможно ли, что смещение вашего массива отключено на единицу (для цикла строки)?
for(int r = 1; r<rows; r++) {
HSSFRow row = sheet.getRow(r);
вместо того, чтобы начинаться со смещения 1, начинать с 0. Это имеет больше смысла (и соответствует вашему столбцу)loop).
В этом случае результат HSSFRow row = sheet.getRow (r);может быть нулевым (что, кстати, вы должны проверить).
Редактировать # 1: Например:
if (sheet == null) {
return;
}
int rows = sheet.getPhysicalNumberOfRows();
for(int r = 1; r<rows; r++) {
HSSFRow row = sheet.getRow(r);
if (row != null) {
int cols = row.getLastCellNum();
for(int c=0; c < cols; c++) {
HSSFCell cell = row.getCell(c, Row.CREATE_NULL_AS_BLANK);
if (cell != null) {
switch(cell.getColumnIndex()) {
case 0:
case 1:
case ...:
}
}
}
}
}
Если вы посмотрите на JavaDoc , это важно
public int getPhysicalNumberOfRows() {
return _rows.size();
}
Возвращает количество физически определенных строк ( НЕ количество строк в листе)
Правка # 2: Радидля дальнейшей отладки, пожалуйста, поместите следующую попытку / поймайте вокруг вашего цикла for.
try {
// Your for loop code here
} catch (Exception x) {
x.printStackTrace();
}
Пожалуйста, вставьте комментарий к этому ответу или обновите свой оригинальный ответ с результатом этого вывода.