Apache POI 4.1 - 새로운 XSSFWorkbook으로 인해 POIXMLException이 발생함: 엄격한 OOXML은 현재 지원되지 않습니다.

Apache POI 4.1 - 새로운 XSSFWorkbook으로 인해 POIXMLException이 발생함: 엄격한 OOXML은 현재 지원되지 않습니다.

약 3~4년 전에 문제가 있었던 것으로 알고 있습니다(ASF 버그 57699) 파일을 읽는 중 .xlsx(https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se).

오늘 Apache POI 4.1을 사용해 보았지만 다음 코드 한 줄에 버그 #57699가 계속 표시됩니다.

XSSFWorkbook workbook = new XSSFWorkbook(uploadFile.getInputStream());

예외 메시지는 아래와 같습니다.

org.apache.poi.ooxml.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699

다른 형식을 사용하는 것 외에 버그 #57699에 대한 해결 방법이 있습니까?

답변1

@PJFanning의 ooxml 변환기를 약간 수정한 버전을 사용합니다.https://github.com/pjfanning/ooxml-strict-converter엄격한 Excel 통합 문서를 스트림으로 확인하고 변환한 다음 POI로 읽습니다. 제한된 테스트에서는 작동하는 것 같지만 제가 가지고 있는 파일은 매우 간단합니다.

이를 감지하기 위해 BufferedInputStream으로 InputStream을 래핑한 다음 Zip 파일(xlsx 파일은 실제로 zip 파일의 XML 파일 모음임) 내부의 XML을 들여다보고 그것이 엄격한 형식임을 나타내는 네임스페이스 마커를 찾습니다.

답변2

https://github.com/pjfanning/excel-streaming-reader이 형식의 xlsx 파일을 읽는 기능이 일부 지원됩니다.

지원은 계속 발전하고 있습니다. OOXML Strict 형식 지원에 관심이 있는 경우 사용 가능한 최신 Excel 스트리밍 리더 버전을 사용하는 것이 좋습니다.

xlsx 파일을 읽을 때 excel-streaming-reader는 파일이 Strict OOXML 형식임을 자동으로 인식합니다.

관련 정보