简体   繁体   English

读取Excel中的二维双数组使用Apache POI

[英]Reading 2D double array in Excel Using Apache POI

I am trying to make use of Apache POI to read an excel file and convert it to a 2-dimensional object array.我正在尝试利用 Apache POI 读取 excel 文件并将其转换为二维 object 数组。 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 . enter image description here这是我的 excel 工作表,我想“只是”将它的蓝色部分作为二维数组读取,但在运行代码后第一行和第一列都是零,我不想要它,谢谢你有关如何快速提取所有零的帮助,请在此处输入图像描述

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.您需要将第一个循环中的索引更改为 0(excel 文件中的第一个字段)但是在行中您必须提供索引 + 1 bc,您需要从第二个字段中读取。 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 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM