2011-03-25 20 views
12

Tengo un código para leer de una hoja de Excel que está en formato antiguo (97-2003). Hice algunos cambios en los datos y terminó un formato de hoja de Excel 2007. Cuando he usado esta hoja xlsx en lugar de hoja de xls, me estoy haciendo esto:BiffException mientras se lee una hoja de Excel

jxl.read.biff.BiffException: Unable to recognize OLE stream 
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116) 
    at jxl.read.biff.File.<init>(File.java:127) 
    at jxl.Workbook.getWorkbook(Workbook.java:268) 
    at readexcel.ReadExcel.readContent(ReadExcel.java:50) 
    at readexcel.ReadExcel.init(ReadExcel.java:25) 
    at readexcel.ReadExcel.main(ReadExcel.java:183) 
+1

Parece que jxl sigue usando el antiguo lector xls para intentar leer su nuevo archivo xlsx. ¿Por qué no simplemente "Guardar como" desde MS Excel para guardarlo en el formato anterior 97-2003 –

Respuesta

17

El formato XLS (Excel < 2007) se compone de datos binarios BIFF en un contenedor OLE. El formato xlsx (> = Excel 2007) se compone de archivos XML en un recipiente postal.

La API de Java Excel solo trata con el primer formato, por lo que arroja una excepción cuando no encuentra un contenedor OLE.

Deberá restringir su entrada solo a archivos xls o buscar otra herramienta que maneje ambos formatos.

+0

Bueno ... eso fue bastante perspicaz ... ¿me puede dar una idea sobre cualquier API que maneje tanto el formato – nowfal

+1

Apache POI maneja ambos tipos de archivos en Java: http://poi.apache.org/spreadsheet/index.html – jmcnamara

4

"guarde como" su libro de trabajo como "libro de trabajo de Excel 97-2003" (la opción viene en Microsoft Excel 2007) guarda su archivo en contenedor OLE.

3

acabo de tener el mismo problema. Proyecto se basó Maven y efecto secundario de la siguiente directiva era para filtrar archivos XLS.

<resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
</resources> 

solución limpia solución fue definir sub carpeta "config" y permitir el filtrado de esta carpeta específica, mientras incluyendo pero no filtrado en otras subcarpetas.

+1

Tuve la el mismo problema. Estoy usando Maven para poner en marcha SoapUI con algunos libros de Excel. Y cuando filtra los archivos de Excel con el experto, los cambia internamente haciendo inservibles. Entonces la solución es no filtrarlos. – CHiRo79

0

Estaba enfrentando el mismo problema en Eclipse/Selenium y traté de "Guardar como" 97-2000 (.xls) y resolvió mi problema.

Cuestiones relacionadas