在Java中使用POI罐读取xlsx文件时获取异常

Har*_*hal 1 java jar xlsx apache-poi

我无法xlsx使用Java 读取文件,无法Exception在创建对象XSSFWorkbook(fis)的那一行中找到。

HashMap<Short, String> keyMap = new HashMap<Short, String>();
HashMap<String, String> valueMap = null;
ArrayList<HashMap<String, String>> rowList = new ArrayList<HashMap<String, String>>();
try {
    FileInputStream fis = new FileInputStream(fileName);
    String fileExtn = getFileExtension(fileName);

    Workbook xssfWorkBook ;
    HSSFWorkbook hssfWorkBook ;
    Sheet sheet=null;
    if (fileExtn.equalsIgnoreCase("xlsx"))
    {
        log.debug("Before creating WorkBook");
        xssfWorkBook = new XSSFWorkbook(fis);
        log.debug("xssfWorkBook object created");
        sheet = xssfWorkBook.getSheetAt(0);
    }else  if (fileExtn.equalsIgnoreCase("xls"))
    {
        hssfWorkBook = new HSSFWorkbook(fis);
        sheet = (Sheet) hssfWorkBook.getSheetAt(0);
    }
    Iterator<Row> rows = sheet.rowIterator();
    int rowCount = 0;
    while (rows.hasNext()) {
        if (rowCount == 0) {
            Row row = rows.next();
            Iterator<Cell> cells = row.cellIterator();
            short cellCounter = 1;
            while (cells.hasNext()) {
                Cell cell = cells.next();
                String cellValue = getCellValueAsString(cell);
                keyMap.put(cellCounter, cellValue);
                cellCounter++;
            }
        } else {
            valueMap = new HashMap<String, String>();
            Row row = rows.next();
            Iterator<Cell> cells = row.cellIterator();
            short cellCounter = 1;
            while (cells.hasNext()) {
                Cell cell = cells.next();
                String cellValue = getCellValueAsString(cell);
                valueMap.put(keyMap.get(cellCounter), cellValue);
                cellCounter++;
            }
            rowList.add(valueMap);
        }
        rowCount++;
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
    log.error("FileNotFoundException" + e);
    throw new Exception("FileNotFoundException while reading Excel file, Message <" + e.getMessage() + ">");
} catch (IOException e) {
    e.printStackTrace();
    log.error("IOException" +e);
    throw new Exception("IOException while reading Excel file, Message <" + e.getMessage() + ">");
}catch(Exception e){
    e.printStackTrace();
    throw new Exception("Exception while reading Excel file, Message <" + e.getMessage() + ">");
}
Run Code Online (Sandbox Code Playgroud)

作为stackTrace获得以下异常是:

位于org.apache.poi.POIXMLDocumentPart。(POIXMLDocumentPart.java:63)处org.apache.poi.openxml4j.opc.OPCPackage.getPart(OPCPackage.java:562)处的java.lang.NullPointerException 。(POIXMLDocument.java:58)(位于org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:186)位于com.covad.portlet.mars.util.ExcelReader.readExcel(ExcelReader.java:72)

小智 6

在确保将文件另存为ExcelWorkbook(.xlsx)之前,我曾遇到过此问题,如果将文件另存为严格打开XML SpreadSheet( .xlsx),则可能会发生此问题,它们的扩展名相同,但内部结构可能会有所不同而且POI似乎不支持它;要解决文件上的问题,请将其重新保存为ExcelWorkbook(*。xlsx)。我希望这可以解决您的问题。