Search code examples
javaarraysxssf

Trying to read and return a string array with xlsx in Java


Hi I've been trying to read an array using xssf, but every time I attempted to return a string array I always messed up. I know my code is bad and all and I am still learning how to make it work, anyways here is my code and please be nice and explain it to me. Thanks!

public static String[][] xlsxReader(){
    File fileIO = new File(FILE_NAME);
    XSSFWorkbook wb;
    String[][] data;
    try {
        wb = new XSSFWorkbook(fileIO);

        //Get the first sheet
        Sheet sheet = wb.getSheetAt(0);

        //Iterate on each rows from the active sheet
        Iterator<Row> rIterator = sheet.iterator();

        //Cannot get the last column for some reason
        data = new String[sheet.getLastRowNum()][sheet.getLastRowNum()*2];

        //While the there is a next iteration of the row, continue loop
        while(rIterator.hasNext()){
            //Assign the entire row to the row class
            Row row = rIterator.next();
            int r = 0;
            r++;

            //Assign the entire row cell into cIterator, to count the number of columns
            Iterator<Cell> cIterator = row.cellIterator();

            //While there is a next iteration column, continue the loop
            while(cIterator.hasNext()){
                //Assign the column iterator to the cell
                Cell cell = cIterator.next();
                int c = 0;
                c++;

                //assign the data string.
                data[r][c] = cell.getStringCellValue();
                //System.out.print(cell.getRowIndex()+ "\t");
                //System.out.print(data[r][c]+ "\t");
            }
            //System.out.print("\n");

        }
        wb.close();
        return data;

    } catch (InvalidFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }

}

Solution

  • I think the issue is actually in your index line... r and c should probably be initalized outside the loop

    int r = 0;
    int c = 0;
    
    while(rows){
       while(cols){
          .../ do work
          c++;
       }
       r++;
       c = 0;
    }