【发布时间】:2019-03-08 11:11:18
【问题描述】:
我目前是使用 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();
}
}
上面的代码在控制台上显示值。我的目标是将这些值存储到一个对象中。像 [{London, Blue},{Tokyo,Yellow},{Manila,Red}] 这样我就可以将它们传递给 dataProvider
如果我运行上面的代码,它会显示: 伦敦 蓝色的 东京 黄色的 马尼拉 红色
但是如果我取消注释这一行:
//tableArr[arrNo1][arrNo2] = cellValue;
输出只有: 伦敦
03-08-19:启用堆栈跟踪后,它说:java.lang.NullPointerException 与此代码有关:
tableArr[arrNo1][arrNo2] = cellValue;
【问题讨论】:
-
抛出了一个异常,你会默默地忽略它。将
e.printStackTrace();放入您的catch块中,您将看到。 -
嗨。谢谢@AxelRichter。我没有注意到,谢谢这个提示..如果你不介意?请问我在将值存储到对象方面是否做对了:
codetableArr[arrNo1][arrNo2] = cellValue;code在启用堆栈跟踪后,它说 java.lang.NullPointerException 与此有关线。我试着打印出我的变量,它有值。抱歉打扰了。 -
在
Object[][] tableArr = new String[sheet.getLastRowNum() + 1][];之后,您认为Object[][] tableArr的尺寸是多少? -
@AxelRichter。我想我现在明白了,null 指的是对象的第二维。谢谢!
-
正确。而且由于数组维度的静态行为,您应该更好地使用Collection。以
List<List<String>> tableList为例。
标签: automation apache-poi qa