[英]I am getting a java.lang.NullPointerException when using Apache POI
當我運行我的代碼時,我收到一個異常,說工作表是 null,即使當我在 excel 中打開工作表時,這些單元格中有明顯的值。
這是異常:錯誤 StatusLogger Log4j2 找不到日志記錄實現。 請將 log4j-core 添加到類路徑中。 Using SimpleLogger to log to the console... Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.apache.poi.xssf.usermodel.XSSFSheet.getLastRowNum()" because "sheet" is null at excelOperations. readExcel.main(readExcel.java:20) PS C:\Users\noobe\Downloads\VSCODE\ReadExcelFile>
package excelOperations;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class readExcel {
public static void main(String[] args) throws FileNotFoundException{
String excelFilePath = "C://Users//noobe//Downloads//test.xlsx";
FileInputStream inputStream = new FileInputStream(excelFilePath);
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.getSheetAt(0);
int rows=sheet.getLastRowNum();
int cols =sheet.getRow(1).getLastCellNum();
for(int r=0 ; r<rows;r++){
XSSFRow row = sheet.getRow(r);
for(int c=0; c<=cols;c++){
XSSFCell cell=row.getCell(c);
switch(cell.getCellType()){
case STRING: System.out.print(cell.getStringCellValue()); break;
case NUMERIC: System.out.print(cell.getNumericCellValue());break;
case BOOLEAN: System.out.print(cell.getBooleanCellValue());break;
}
System.out.print(" | ");
}
System.out.println();
}
}
}
當您嘗試使用尚未創建的變量或 object 執行操作時,將引發 NullPointerException。 您可以在此處找到一些附加信息: 什么是 NullPointerException,以及如何修復它?
特別是在您的情況下,您已經創建了一個新的XSSFWorkbook()
但您尚未將文件加載到其中(您聲明的 inputStream 被完全忽略),因此它不會有任何數據/內容可供讀取,這就是為什么你得到錯誤。
簡單的解決方案是更改您現有的生產線:
XSSFWorkbook workbook = new XSSFWorkbook();
而是使用文檔中顯示的構造函數之一,該構造函數接受您要加載的文檔作為輸入。 您很幸運,可以將 FileInputStream 直接傳遞給構造函數,如下所示:
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
我還建議您在任何時候對工作表、行、單元格等使用get
方法時進行 null 檢查,因為通常一個空白單元格會給出 null 結果,但可以輕松檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.