将单元格值存储到Object

问题描述 投票:2回答:1

我目前刚接触使用java的TestNG。我正在尝试使用poi apache 4.0从excel中读取值

    public static void read2dRowExcelFile2(String filePath) throws IOException {

    try {
        FileInputStream fis = new FileInputStream(new File(filePath));
        HSSFWorkbook wb = new HSSFWorkbook(fis);
        HSSFSheet sheet = wb.getSheet("PerLocation");

        Object[][] tableArr = new String[sheet.getLastRowNum() + 1][];
        int arrNo1 = 0;
        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);              
            int arrNo2 = 0;
            for (int j = 0; j < row.getLastCellNum(); j++) {
                String cellValue = row.getCell(j).getStringCellValue();
                System.out.println(acellValue);
                //tableArr[arrNo1][arrNo2] = cellValue;
                System.out.println("test");
                arrNo2++;
            }

            arrNo1++;
        }

        wb.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

上面的代码显示控制台上的值。我的目标是将这些值存储到Object。像[{London,Blue},{Tokyo,Yellow},{Manila,Red}]之类的东西,所以我可以将它们传递给dataProvider

如果我运行上面的代码,它会显示:London BLue Tokyo Yellow Manila Red

但如果我取消注释这一行:

//tableArr[arrNo1][arrNo2] = cellValue;

输出仅为:伦敦

03-08-19:启用stacktrace后,它说:java.lang.NullPointerException与此代码有关:

tableArr[arrNo1][arrNo2] = cellValue;
automation apache-poi qa
1个回答
0
投票

从你的代码,

Object[][] tableArr = new String[sheet.getLastRowNum() + 1][]; 

在初始化数组时,您将设置第一维的大小而不是第二维的大小。在访问第二维之前,需要初始化第二维的数组。

参考下面的例子:

    public static void main(String[] args) {
        //read rows size
        int numOfRows = 3;
        String[][] tableArr = new String[numOfRows][];

        for (int row = 0; row <3; row++) {
            //read columns size
            int numOfColsInRow = 3;
            tableArr[row]=new String[numOfColsInRow];              
            for (int col = 0; col < 3; col++) {
                String cellValue = "cell-" + row+""+col;//read cell value
                tableArr[row][col] = cellValue;
            }
        }

        for(String[] row: tableArr) {
            System.out.println(Arrays.toString(row));
        }
    }

在代码上运行以生成预期输出:

[cell-00, cell-01, cell-02]
[cell-10, cell-11, cell-12]
[cell-20, cell-21, cell-22]

要重现您的问题,您可以尝试注释在代码中为第二维初始化数组的行,您将看到Exception in thread "main" java.lang.NullPointerException

        //tableArr[row]=new String[numOfColsInRow];              

为了避免所有这些问题,您还可以检查是否有任何现有的TestNG data-provider extension满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.