Estou ciente de que há cerca de 3 a 4 anos houve um problema (Bug ASF 57699) com leitura .xlsx
de 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.