使用 Apache POI 在 Excel 中读取 2D 双精度数组

发布于 2025-01-11 12:59:40 字数 1128 浏览 0 评论 0原文

我正在尝试利用 Apache POI 读取 Excel 文件并将其转换为二维对象数组。附件是代码部分。

    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;
}

在此处输入图像描述 这是我的 Excel 工作表,我想“仅”阅读蓝色部分它作为二维数组,但运行代码后,第一行和第一列都为零,我不想要它,感谢您帮助如何快速取出所有零 在此处输入图像描述

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逐鹿 2025-01-18 12:59:40

您需要将第一个循环中的索引更改为0(excel文件中的第一个字段)
但在行中,您必须提供索引 + 1 bc,您需要从第二个字段读取。
第二个循环和单元格字段的类比相同


 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();

返回结果:

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 

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 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文