Ошибка файла Apache POI xls

Я хочу прочитать формат файлов xls и xlsx. Он отлично работает для формата xlsx, но я получаю следующую ошибку при загрузке файла xls.

Код:

try {

    FileInputStream fileInputStream = new FileInputStream("/apps/" + fileName);
    //POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream);

    Workbook workBook = WorkbookFactory.create(OPCPackage.open(fileInputStream));
    //XSSFWorkbook workBook1 = new XSSFWorkbook();
    Sheet ssSheet = workBook.getSheetAt(0); 

    Iterator rowIterator = ssSheet.rowIterator();

    while (rowIterator.hasNext()) {
        Row ssRow = (Row) rowIterator.next();
        Iterator iterator = ssRow.cellIterator();
        List cellTempList = new ArrayList();
        while (iterator.hasNext()) {
            Cell ssCell = (Cell) iterator.next();
            cellTempList.add(ssCell);
        }
        cellDataList.add(cellTempList);
    }
} catch (Exception e) {
    e.printStackTrace();
}

Ошибка:

org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
      at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:148)
      at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:623)
      at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:230)

Пожалуйста помоги.

-Спасибо


person mtk    schedule 24.08.2012    source источник


Ответы (1)


Я думаю, что ваша проблема связана с тем, что вы пытаетесь создать свою книгу с помощью OPCPackage, даже если вы используете WorkbookFactory. OPCPackage "разархивируйте" ваш .xlsx, чтобы иметь возможность читать xml-файлы внутри, но это не должно работать для HSSF, поскольку это двоичный файл.

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

WorkbookFactory.create(InputStream input)

Я думаю, это должно работать нормально.

person ArtiBucco    schedule 24.08.2012
comment
Спасибо!! Это точно помогло. Была ошибка. Я удалил OPCPackage. - person mtk; 29.08.2012
comment
@mtk как удалить пакет opc? я получаю такое же исключение. - person Mihir; 27.10.2013
comment
@Mihir, вместо XSSFWorkbook используйте Workbook (Workbook workbook = WorkbookFactory.create(fileInputStream);) - person user1486984; 26.06.2015