Исключение в потоке "main" java .lang.NullPointerException Ошибка при вызове метода для записи строки в лист Excel в JAVA - PullRequest
0 голосов
/ 03 мая 2020

Исключение в потоке "main" java .lang.NullPointerException Ошибка при вызове метода для записи строки в лист Excel в JAVA. Ошибка как показано ниже

Исключение в потоке "main" java .lang.NullPointerException в ManualVolteCxCreation.ExcelDataReader.writeExcelTestResult (ExcelDataReader. java: 51)

Вызов метода writeExcelTestResult из основного класса, как показано ниже.

excelDataReader.writeExcelTestResult(startRowIndex, "There are already connections with");

Класс чтения данных Excel имеет конструктор, в котором инициализируются файл Excel, книгу Excel и лист Excel, а также два методы чтения данных Excel и записи в 7-й столбец файла Excel. Класс чтения данных Excel выглядит следующим образом.

import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelDataReader {

    ConfigReader configReader = new ConfigReader();
    File testFilePath;
    FileInputStream fis;
    XSSFWorkbook volteConnections;
    XSSFSheet testDataFile;
    XSSFRow rowTestData; 

    public ExcelDataReader() {

    try {

        testFilePath = new File(configReader.readPropertyValue("excel")); 
        fis = new FileInputStream(testFilePath); 

        // Finds the workbook instance for XLSX file 
        volteConnections = new XSSFWorkbook(fis);   

        // Return first sheet from the XLSX workbook 
        testDataFile = volteConnections.getSheetAt(0);

    } catch (Exception e) {

        e.printStackTrace();

    } 

    }   

    public XSSFRow readExcelRowTestData(int rowIndex) {

        rowTestData = testDataFile.getRow(rowIndex);
        return rowTestData;

    }

    public void writeExcelTestResult(int rowIndex, String testResult) {

        testDataFile.getRow(rowIndex).getCell(7).setCellValue(testResult);

   }


}

Я отладил и попытался выяснить, где проблема, но обнаружил, что каждая переменная была инициализирована, как показано на рисунке ниже.

Variable initialization at the point of time

Итак, какие-либо предложения, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 05 мая 2020

Вам просто нужно сначала создать ячейку, а затем вызвать метод setCellValue.

Чтобы сохранить файл, вам также необходим объект FileOutputStream.

Таким образом, вы можете изменить метод writeExcelTestResult. как показано ниже.

public void writeExcelTestResult(int rowIndex, String testResult) {

          if (cellTestData == null) {

              cellTestData = testDataFile.getRow(rowIndex).createCell(7);

          }

          cellTestData.setCellValue(testResult);
          try {
            fis.close();
            fos = new FileOutputStream(testFilePath);
            volteConnections.write(fos);
            fos.close();
        } catch (IOException e) {

            e.printStackTrace();
        }         

   }
...