Apache POI — Чтение файла Excel в 2D-массиве — возврат нулевых значений

#java #selenium #apache-poi

#java #selenium #apache-poi

Вопрос:

Я пытаюсь прочитать матрицу Excel -2 * 2 через Apache POI. Но первое значение, возвращаемое 2D-массивом, равно [null, нуль]. Пожалуйста, проверьте мой код и посоветуйте подходящие исправления.

 public String[][] getDataArray(String sheetName)
{

    String value ="";
    String[][] data = null;


    int rowCount = wb.getSheet(sheetName).getLastRowNum();
    int colCount = wb.getSheet(sheetName).getRow(1).getLastCellNum()-1;

    data = new String[rowCount][colCount];

    for(int i=1; i<=rowCount;i  )
    {           

        Row row = wb.getSheet(sheetName).getRow(i);
        for(int j=0;j<colCount;j  )
        {


            Cell cell = row.getCell(j);
            if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC)
            {
                value = "" cell.getStringCellValue();
            }
            else
            {
                value = cell.getStringCellValue();
            }
            data[i][j] = value;


        }
    }
    return data;

}
  

Представление отладки, в котором мы можем видеть, что первое значение, сохраненное в переменной data, равно null, null

Excel, который я пытаюсь прочитать. Мне нужны только данные имени пользователя и пароля (2 * 2). Не данные заголовка и режима выполнения.

введите описание изображения здесь

Ответ №1:

Конечно, значение в индексе 0 будет нулевым, потому что i начинается с 1 , а не 0

 for (int i = 1; i <= rowCount; i  ) //i starts from one
...
data[i][j] = value;
  

либо инициализируйте i с 0, либо сделайте вот так

 data[i-1][j] = value;
  

Ответ №2:

 public static String[][] getSheetData(final String fileName, final String workSheetName)
            throws Exception {
        Integer lastRow = null;
        short lastCol = 0;
        String[][] sheetData = null;
        FileInputStream file=new FileInputStream(MettlTest.class.getClass().getResource("/"   fileName).getPath());
        workbook = new XSSFWorkbook(file);
        sheet = workbook.getSheet(workSheetName);
        try {
            XSSFRow row;
            XSSFCell cell;
            lastRow = sheet.getPhysicalNumberOfRows();
            lastCol = sheet.getRow(1).getLastCellNum();
            sheetData = new String[lastRow - 1][lastCol];
            for (int r = 1; r < lastRow; r  ) {
                row = sheet.getRow(r);
                if (row != null) {
                    for (int c = 0; c < lastCol; c  ) {
                        cell = row.getCell(c);
                        if (cell == null) {
                            sheetData[r][c] = null;
                        } else {
                            sheetData[r-1][c] = new DataFormatter().formatCellValue(cell);
                        }
                    }
                }
            }
            return sheetData;
        } 

        catch (final Exception e) {
            throw e;
        }
        finally {
            try {
                file.close();
            } catch (IOException io) {
                Reporter.log("Unable to close File : "   fileName);
                throw io;
            }
        }