Apache POI 4.1: el nuevo XSSFWorkbook provoca POIXMLException: OOXML estricto no es compatible actualmente

Apache POI 4.1: el nuevo XSSFWorkbook provoca POIXMLException: OOXML estricto no es compatible actualmente

Soy consciente de que hace unos 3 o 4 años hubo un problema (Error de PPA 57699) con lectura .xlsxde archivos (https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se).

Hoy probé Apache POI 4.1, pero todavía veo el error n.° 57699 con la siguiente línea de código:

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

El mensaje de excepción está a continuación:

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

¿Existe alguna solución alternativa al error n.º 57699 además de utilizar diferentes formatos?

Respuesta1

Utilizo una versión ligeramente modificada del convertidor ooxml de @PJFanning.https://github.com/pjfanning/ooxml-strict-converterpara buscar y convertir libros estrictos de Excel (como secuencias) y luego leerlos con POI. En pruebas limitadas parece funcionar, aunque los archivos que tengo son bastante sencillos.

Para detectarlo, envuelvo el InputStream con un BufferedInputStream y luego miro el XML dentro del archivo Zip (los archivos xlsx son en realidad una colección de archivos XML en un archivo zip) buscando los marcadores de espacio de nombres que indican que está en formato estricto.

Respuesta2

https://github.com/pjfanning/excel-streaming-readertiene cierto soporte para leer archivos xlsx en este formato.

El soporte aún está evolucionando, se recomienda que utilice la última versión disponible del lector de transmisión de Excel si está interesado en admitir el formato OOXML Strict.

Al leer archivos xlsx, excel-streaming-reader reconoce automáticamente que el archivo está en formato OOXML estricto.

información relacionada