【问题标题】:Getting exception while reading xlsx file using POI jars in java在java中使用POI jars读取xlsx文件时出现异常
【发布时间】:2016-02-01 10:50:49
【问题描述】:

我无法使用 java 读取 xlsx 文件,在我创建对象 XSSFWorkbook(fis) 的行中获取 Exception

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() + ">");
}

作为 stackTrace 获得以下异常是:

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

【问题讨论】:

  • 如果您去找机械师并告诉他您的车无法启动并且是福特汽车,您认为这些信息足以让机械师修理您的汽车吗?
  • 嗨,Petter,我检查了系统日志,发现它是 NullPointerException。下面是在 org.apache.poi.POIXMLDocumentPart.(POIXMLDocumentPart.java: 63) 在 org.apache.poi.POIXMLDocument.(POIXMLDocument.java:58) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:186) 在 com.covad.portlet .mars.util.ExcelReader.readExcel(ExcelReader.java:72)
  • 好吧,这比上面的错误有用得多......(被包装掉了)
  • 对我来说,xlsx 文件似乎不是正确的 xlsx 文件,poi 无法读取它。尝试使用另一个 xlsx 文件
  • 确保您也具有读取该文件的适当权限。还要考虑您使用 xls 而不是 xlsx的可能性。

标签: java jar apache-poi xlsx


【解决方案1】:

在确保文件另存为之前,我遇到了这个问题 ExcelWorkbook(.xlsx) ,如果您将文件保存为 Strict Open XML SpreadSheet(.xlsx),它们都具有相同的扩展名,但内部结构可能不同,POI似乎不支持它;解决文件问题重新保存为ExcelWorkbook(*.xlsx ) . 我希望这可以解决您的问题。

【讨论】:

  • 您为我节省了许多尝试和调查的时间。非常感谢!
  • 请将此标记为已接受的答案
【解决方案2】:

是的,上面的程序需要几个jar,如 poi-3.7.jar、poi-ooxml-3.7-20101029.jar、poi-ooxml-schemas-3.7-20101029.jar、xmlbeans-2.3.0.jar 和 dom4j- 1.6.1.jar。

另外,我尝试的输入文件也有问题。我创建了新的空白文件并复制了我需要的所有数据并尝试读取相同的数据。它奏效了。

感谢大家的时间和帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多