Apache POI 4.1 - novo XSSFWorkbook causa POIXMLException: Strict OOXML não é suportado atualmente

Apache POI 4.1 - novo XSSFWorkbook causa POIXMLException: Strict OOXML não é suportado atualmente

Estou ciente de que há cerca de 3 a 4 anos houve um problema (Bug ASF 57699) com leitura .xlsxde arquivos (https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se).

Hoje experimentei o Apache POI 4.1, mas ainda vejo o bug nº 57699 com a seguinte linha de código:

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

A mensagem de exceção está abaixo:

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

Existe alguma solução alternativa para o bug nº 57699 além de usar formatos diferentes?

Responder1

Eu uso uma versão ligeiramente modificada do conversor ooxml do @PJFanninghttps://github.com/pjfanning/ooxml-strict-converterpara verificar e converter pastas de trabalho estritas do Excel (como fluxos) e depois lê-las com POI. Em testes limitados, parece funcionar, embora os arquivos que tenho sejam bastante simples.

Para detectar, envolvo o InputStream com um BufferedInputStream e, em seguida, espio o XML dentro do arquivo Zip (os arquivos xlsx são na verdade uma coleção de arquivos XML em um arquivo zip) procurando os marcadores de namespace que indicam que ele está em formato estrito.

Responder2

https://github.com/pjfanning/excel-streaming-readertem algum suporte para leitura de arquivos xlsx neste formato.

O suporte ainda está evoluindo, é recomendável usar a versão mais recente disponível do Excel-streaming-reader se estiver interessado em oferecer suporte ao formato OOXML Strict.

Ao ler arquivos xlsx, o excel-streaming-reader reconhece automaticamente que o arquivo está no formato Strict OOXML.

informação relacionada