Сохранить значения ячеек в Object - PullRequest
2 голосов
/ 08 марта 2019

В настоящее время я новичок в TestNG с использованием Java. Я пытаюсь прочитать значения из Excel с помощью Poi Apache 4.0

    public static void read2dRowExcelFile2(String filePath) throws IOException {

    try {
        FileInputStream fis = new FileInputStream(new File(filePath));
        HSSFWorkbook wb = new HSSFWorkbook(fis);
        HSSFSheet sheet = wb.getSheet("PerLocation");

        Object[][] tableArr = new String[sheet.getLastRowNum() + 1][];
        int arrNo1 = 0;
        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);              
            int arrNo2 = 0;
            for (int j = 0; j < row.getLastCellNum(); j++) {
                String cellValue = row.getCell(j).getStringCellValue();
                System.out.println(acellValue);
                //tableArr[arrNo1][arrNo2] = cellValue;
                System.out.println("test");
                arrNo2++;
            }

            arrNo1++;
        }

        wb.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

Код выше отображает значения на консоли. Моя цель - сохранить эти значения в объекте. Что-то вроде [{London, Blue}, {Tokyo, Yellow}, {Manila, Red}], чтобы я мог передать их поставщику данных

Если я запускаю код выше, он отображает: Лондон синий цвет Токио желтый Манила Красный

Но если я раскомментирую эту строку:

//tableArr[arrNo1][arrNo2] = cellValue;

Вывод только: Лондон

03-08-19: после того, как я включил трассировку стека, он говорит: java.lang.NullPointerException который относится к этому коду:

tableArr[arrNo1][arrNo2] = cellValue;

1 Ответ

0 голосов
/ 11 марта 2019

Из вашего кода

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расширение провайдера данных удовлетворяет ваши потребности.

...