example - ¿Cuál es la mejor API para leer hojas de Excel en java? JXL o Apache POI
selenium excel (4)
¿Cuál de las 2 API es más fácil de leer / escribir / editar hojas de Excel? ¿Estas API no admiten extensiones CSV?
Usando JXL para file.xls y file.xlsx, obtengo una excepción como:
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 core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
at core.ReadXLSheet.init(ReadXLSheet.java:22)
at core.ReadXLSheet.main(ReadXLSheet.java:72)
Ambos para extensiones .xls y .xlsx. La versión de Java que estoy usando es: JDK1.6
He usado POI.
Si usa eso, tenga en cuenta los formateadores de celdas: cree uno y úselo varias veces en lugar de crear cada vez para la celda, es una gran diferencia de consumo de memoria o datos grandes.
He usado tanto JXL (ahora "JExcel") como Apache POI . Al principio usé JXL, pero ahora uso Apache POI.
Primero, aquí están las cosas donde ambas API tienen la misma funcionalidad final:
- Ambos son gratuitos
- Estilo de celda: alineación, fondos (colores y patrones), bordes (tipos y colores), compatibilidad con fuentes (nombres de fuente, colores, tamaño, negrita, cursiva, tachado, subrayado)
- Fórmulas
- Hipervínculos
- Regiones de células fusionadas
- Tamaño de filas y columnas
- Formato de datos: números y fechas
- Ajuste de texto dentro de las celdas
- Paneles congelados
- Soporte de encabezado / pie de página
- Leer / Escribir hojas de cálculo existentes y nuevas
- Ambos intentan mantener los objetos existentes en las hojas de cálculo que leen intactos en la medida de lo posible.
Sin embargo, hay muchas diferencias:
- Quizás la diferencia más significativa es que Java JXL no es compatible con el formato Excel 2007+ ".xlsx"; solo es compatible con el antiguo formato BIFF (binario) ".xls". Apache POI admite ambos con un diseño común.
- Además, la parte de Java de la API de JXL se actualizó por última vez en 2009 (hace 3 años, 4 meses cuando escribo esto), aunque parece que hay una API de C #. Apache POI se mantiene activamente.
- JXL no es compatible con el formato condicional, Apache POI sí lo hace, aunque esto no es tan significativo, ya que puede formatear las celdas de manera condicional con su propio código.
- JXL no es compatible con el formato de texto enriquecido , es decir, diferentes formatos dentro de una cadena de texto; Apache POI sí lo admite.
- JXL solo admite ciertas rotaciones de texto: horizontal / vertical, +/- 45 grados y apiladas; El POI de Apache admite cualquier número entero de grados más apilados.
- JXL no admite dibujar formas; Apache POI hace.
- JXL es compatible con la mayoría de los ajustes de configuración de página, como Paisaje / Retrato, Márgenes, Tamaño de papel y Zoom. Apache POI es compatible con todo eso además de repetir filas y columnas.
- JXL no es compatible con Split Panes; Apache POI hace.
- JXL no admite la creación o manipulación de gráficos; ese soporte aún no está en Apache POI, pero una API lentamente comienza a formarse.
- Apache POI tiene un conjunto más extenso de documentación y ejemplos disponibles que JXL.
Además, POI contiene no solo la API principal del "modelo de usuario", sino también una API basada en eventos si todo lo que desea hacer es leer el contenido de la hoja de cálculo.
En conclusión, debido a la mejor documentación, más características, desarrollo activo y compatibilidad con el formato Excel 2007+, uso Apache POI.
No estoy familiarizado con JXL pero usamos POI. POI está bien mantenido y puede manejar tanto el formato binario .xls como el nuevo formato basado en xml que se introdujo en Office 2007.
Los archivos CSV no son archivos de Excel, son archivos de texto, por lo que estas bibliotecas no los leen. Tendrá que analizar un archivo CSV usted mismo. No conozco ninguna biblioteca de archivos CSV, pero tampoco he buscado.
Para leer archivos CSV "simples" en Java, hay una biblioteca llamada OpenCSV, disponible aquí: http://opencsv.sourceforge.net/