#java #vba #excel #selenium-webdriver
#java #vba #excel #selenium-webdriver
Вопрос:
Я пытаюсь прочитать данные с листа Excel, но получаю исключение NullPointerException каждый раз при чтении данных с индексом ячейки = 6. Введите while(значение!= null), чтобы избежать нулевых значений, но все равно получил исключение без какого-либо вывода. Я помещаю снимок экрана листа Excel, откуда я пытаюсь получить данные.
Code-
package com.selenium;
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.io.IOException;
public class Exxcel {
public static void main(String[] args) throws Exception,NullPointerException{
//WebDriver driver= new FirefoxDriver();
//WebElement wb;
try{
FileInputStream file= new FileInputStream("C:\Documents and Settings\OMEGA\Desktop\Test Planning And Documents\Automation Data.xlsx");
Workbook data=WorkbookFactory.create(file);
Sheet sheet=data.getSheet("Sheet1");
for(int i=1;i<=sheet.getLastRowNum();i ){
Row row= sheet.getRow(i);
int j=0;
String value=row.getCell(j).getStringCellValue();
while(value != null){
System.out.println(value);
}//while
while(value == null){
j ;
}
}//for
/*while(j1==9){
String value=row.getCell(j1).getStringCellValue();
System.out.println(value);
}//while2
*/
}catch(NullPointerException n){n.printStackTrace();
System.out.println("Null");
}// catch
}//main
}//class
StackTrace-
Null
java.lang.NullPointerException
at com.selenium.Exxcel.main(Exxcel.java:22)
Ответ №1:
Этого недостаточно, чтобы проверить это row.getCell(j).getStringCellValue() != null
. Вы должны это проверить row.getCell(j) != null
.
Кроме того, ваши циклы while не имеют смысла :
Первый либо ничего не сделает, либо напечатает значение навсегда (поскольку вы не меняете значение внутри цикла).
while(value != null) {
System.out.println(value);
}//while
Второй либо ничего не сделает, либо увеличит j навсегда (поскольку вы не меняете значение внутри цикла).
while(value == null) {
j ;
}
Я предлагаю вам заменить их следующим кодом :
Row row = sheet.getRow(i);
if (row != null) {
for (int j = 0; j < row.getLastCellNum(); j ) {
if (row.getCell(j) != null) {
if (row.getCell(j).getCellType() == CELL_TYPE_STRING) {
String value=row.getCell(j).getStringCellValue();
if(value != null) {
System.out.println(value);
}
}
}
}
}
Комментарии:
1. Изменился ли код, как вы сказали, но все еще получал исключение без какого-либо значения / вывода
2. @Shantanu В какой строке вы получаете исключение? Возможно, вам также следует проверить эту строку!= null.
3. @EranSir это сработало, когда я ввел строку!= null…. Но я получаю вывод в одной строке. Возможно ли получить значение каждой ячейки независимо. Например, строка s1 = значение ячейки 1, строка s2 = значение второй ячейки
4. @Shantanu Вы ничего не получите, создав массив внутри цикла, поскольку значения, прочитанные в предыдущих столбцах, будут переопределены. Кроме того, в вашем случае не рекомендуется использовать массив, поскольку вы заранее не знаете, сколько строк вам пришлось бы хранить в этом массиве. Инициализировать массив, содержащий i элементов, не имеет смысла, поскольку i — это просто индекс текущей строки.
5. @Shantanu в начале (перед тем, как вы начнете читать строки), сделайте
List<String> list = new ArrayList<String>()
; Затем делайтеlist.add(value)
каждый раз, когда вы считываете новое значение из файла.