线程异常 "main" java.lang.NullPointerException 调用方法将字符串写入 Excel sheet in JAVA 时出错
Exception in thread "main" java.lang.NullPointerException error when calling a method to write a string into Excel sheet in JAVA
调用方法将字符串写入 Excel sheet in JAVA 时,线程 "main" 出现异常 java.lang.NullPointerException 错误。错误如下
线程 "main" java.lang.NullPointerException 中的异常 ManualVolteCxCreation.ExcelDataReader.writeExcelTestResult(ExcelDataReader.java:51)
从主程序调用 writeExcelTestResult 方法 class 如下所示。
excelDataReader.writeExcelTestResult(startRowIndex, "There are already connections with");
Excel 数据 Reader class 具有初始化 excel 文件、excel 工作簿和 excel sheet 和读取 excel 数据并写入 excel 文件第 7 列的两种方法。 Excel数据Readerclass如下
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);
}
}
我调试并试图找出问题所在,但发现每个变量都已初始化,如下图所示。
有什么建议可以解决这个问题吗?
您只需要先创建单元格,然后调用 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();
}
}
调用方法将字符串写入 Excel sheet in JAVA 时,线程 "main" 出现异常 java.lang.NullPointerException 错误。错误如下
线程 "main" java.lang.NullPointerException 中的异常 ManualVolteCxCreation.ExcelDataReader.writeExcelTestResult(ExcelDataReader.java:51)
从主程序调用 writeExcelTestResult 方法 class 如下所示。
excelDataReader.writeExcelTestResult(startRowIndex, "There are already connections with");
Excel 数据 Reader class 具有初始化 excel 文件、excel 工作簿和 excel sheet 和读取 excel 数据并写入 excel 文件第 7 列的两种方法。 Excel数据Readerclass如下
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);
}
}
我调试并试图找出问题所在,但发现每个变量都已初始化,如下图所示。
有什么建议可以解决这个问题吗?
您只需要先创建单元格,然后调用 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();
}
}