Я пытаюсь прочитать данные из одного .xlsx и поместить его в другой файл. Ошибка происходит, когда цикл работает во второй раз. Нет пустых ячеек, и все 187 строк имеют в них данные (проверены и проверены). В нем есть только один столбец с данными (первый столбец A), поэтому я не использую Null Checker. Вот код, который у меня есть. Я не включаю код для записи и закрытия файла, поскольку ошибка возникает во время второй итерации цикла.Использование POI throws java.lang.NullPointerException
FileInputStream fis=new FileInputStream("C:\\test\\Migration_input.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
int rowCount = sheet.getLastRowNum();
System.out.println(rowCount);
FileOutputStream fos=new FileOutputStream("C:\\test\\Migration.xlsx");
for (int b=0; b<rowCount;b++)
{
System.out.println(b);
//This part to read from existing file
XSSFRow rowreader=sheet.getRow(b);
XSSFCell cellreader = rowreader.getCell(0);
**String cellinput = cellreader.getStringCellValue(); //Errors out on this line on second iteration - It is not a null value and has some string data in it.
//This part to write in a different file
XSSFRow rowwriter=sheet.createRow(b+1);
XSSFCell cellwriter= rowwriter.createCell(2);
System.out.println(cellinput);
cellwriter.setCellType(cellwriter.CELL_TYPE_STRING);
cellwriter.setCellValue(cellinput);
System.out.println("done");
}
Я изменил код этого, но по-прежнему кажется, что имеет ошибку:
for (int b=0; b<rowCount;b++)
{
System.out.println(b);
//This part to read from existing file
XSSFRow rowreader=sheet.getRow(b);
XSSFCell cellreader = rowreader.getCell(0);
System.out.println(cellreader.getStringCellValue());
**cellinput[b] = cellreader.getStringCellValue(); //Errors out
System.out.println("stored in array string all the values");
}
А вот обновленное OUTPUT
0
Academic Cert Expected Date
FAILED: get_labels
java.lang.NullPointerException
at crm_migration.labels_on_given_object.get_labels(labels_on_given_object.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
считывает значение из формата XLSX отлично, но когда я пытаюсь сохранить его в массив строк, то есть когда он выдает ошибку сейчас. Я разделил цикл так, чтобы он читал только сейчас и сохраняет значение в массиве **, опять же в первом столбце A нет нулевых значений с 187 строками. Пожалуйста помогите.
какой из них - линия 64? –
Ошибка возникает из-за того, что вы читаете и записываете в том же файле. 'XSSFRow rowwriter = sheet.createRow (b + 1);' ваш лист переменных здесь такой же, как тот, который вы читаете, если отсутствует код. Если отсутствует код, исправьте свой вопрос. –
Тот, который помечен как ошибка, используя ** и комментарий. –