Home > Back-end >  Reading 2D double array in Excel Using Apache POI
Reading 2D double array in Excel Using Apache POI

Time:03-03

I am trying to make use of Apache POI to read an excel file and convert it to a 2-dimensional object array. Attached is the code section.

    Workbook workbook = new XSSFWorkbook(inputStream);
    Sheet firstSheet = workbook.getSheetAt(1);
    int numRows = 3;
    int cols = 5;
    double[][] excelData = new double[numRows][cols];
    for (int i = 1; i < numRows; i  ) {
        Row row = firstSheet.getRow(i);
        if (row != null) {
            for (int j = 1; j < cols; j  ) {
                Cell cell = row.getCell(j);
                if (cell != null) {
                    try {
                        excelData[i][j] = cell.getNumericCellValue();
                    } catch (IllegalStateException e) {
                        System.out.println("Cell data is not a double");
                    }
                }
            }
        }
    }
    workbook.close();
    inputStream.close();
    return excelData;
}

enter image description here This is my excel sheet and I want to "just" read the blue part of it as a 2d array, but after running the code the first row and column all are zero and I don't want it, appreciate your help on how can quickly pull out all the zeros enter image description here.

CodePudding user response:

You need to change index in the 1st loop to 0 (first field in excel file) but in row you must provide index 1 bc you need to read from the 2nd field. Same analogy for 2nd loop and cell field


 Workbook workbook = new XSSFWorkbook(new File("d:\\book1.xlsx"));
        Sheet firstSheet = workbook.getSheetAt(1);
        int numRows = 3;
        int cols = 5;
        double[][] excelData = new double[numRows][cols];
        for (int i = 0; i < numRows; i  ) {
            Row row = firstSheet.getRow(i   1);
            if (row != null) {
                for (int j = 0; j < cols; j  ) {
                    Cell cell = row.getCell(j   1);
                    if (cell != null) {
                        try {
                            if (cell.getCellType().equals(CellType.NUMERIC)) {
                                excelData[i][j] = Double.valueOf(cell.getNumericCellValue());
                            }
                        } catch (IllegalStateException e) {
                            System.out.println("Cell data is not a double");
                        }
                    }
                }
            }
        }
        workbook.close();

Returned result for it:

0.041256 0.033079 -0.01138 -0.02138 -0.01138 
0.041256 0.033079 -0.01138 -0.01138 -0.01138 
0.020628 0.01654 -0.00569 -0.10569 -0.00569 
  • Related