Из вашего кода
Object[][] tableArr = new String[sheet.getLastRowNum() + 1][];
Во время инициализации массива вы устанавливаете размер первого измерения, но не второго.Вам необходимо инициализировать массив для второго измерения, прежде чем вы получите к нему доступ.
См. Пример ниже:
public static void main(String[] args) {
//read rows size
int numOfRows = 3;
String[][] tableArr = new String[numOfRows][];
for (int row = 0; row <3; row++) {
//read columns size
int numOfColsInRow = 3;
tableArr[row]=new String[numOfColsInRow];
for (int col = 0; col < 3; col++) {
String cellValue = "cell-" + row+""+col;//read cell value
tableArr[row][col] = cellValue;
}
}
for(String[] row: tableArr) {
System.out.println(Arrays.toString(row));
}
}
Запуск кода выше с генерацией ожидаемого вывода:
[cell-00, cell-01, cell-02]
[cell-10, cell-11, cell-12]
[cell-20, cell-21, cell-22]
КомуВоспроизведите вашу проблему, вы можете попробовать прокомментировать строку, которая инициализирует массив для второго измерения в коде, и вы увидите Exception in thread "main" java.lang.NullPointerException
.
//tableArr[row]=new String[numOfColsInRow];
Чтобы избежать всех подобных проблем, вы также можете проверить, нет ли выхода из TestNGрасширение провайдера данных удовлетворяет ваши потребности.