Qual è l'API migliore per leggere fogli Excel in java - JXL o Apache POI [chiuso]


94

Quale delle 2 API è più semplice da leggere / scrivere / modificare i fogli Excel? Queste API non supportano le estensioni CSV?

Usando JXL per file.xls e file.xlsx, ottengo un'eccezione come:

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)

Sia per le estensioni .xls che .xlsx. La versione di Java che sto utilizzando è: JDK1.6


1
Che dire di: "Quali API esistono per leggere / scrivere fogli di calcolo Microsoft Excel (JXL, Apache POI, ecc.) In Java? Quali sono i migliori scenari per utilizzarli?"
Cléssio Mendes

Risposte:


258

Ho usato sia JXL (ora "JExcel") e Apache POI . All'inizio ho usato JXL, ma ora uso Apache POI.

Innanzitutto, ecco le cose in cui entrambe le API hanno la stessa funzionalità finale:

  • Entrambi sono gratuiti
  • Stile delle celle: allineamento, sfondi (colori e motivi), bordi (tipi e colori), supporto dei caratteri (nomi dei caratteri, colori, dimensioni, grassetto, corsivo, barrato, sottolineato)
  • Formule
  • Collegamenti ipertestuali
  • Regioni cellulari unite
  • Dimensioni di righe e colonne
  • Formattazione dei dati: numeri e date
  • Testo a capo all'interno delle celle
  • Blocca riquadri
  • Supporto per intestazione / piè di pagina
  • Leggere / scrivere fogli di calcolo esistenti e nuovi
  • Entrambi tentano di mantenere intatti gli oggetti esistenti nei fogli di calcolo che leggono il più possibile.

Tuttavia, ci sono molte differenze:

  • Forse la differenza più significativa è che Java JXL non supporta il formato ".xlsx" di Excel 2007+; supporta solo il vecchio formato BIFF (binario) ".xls". Apache POI supporta entrambi con un design comune.
  • Inoltre, la parte Java dell'API JXL è stata aggiornata l'ultima volta nel 2009 (3 anni, 4 mesi fa mentre scrivo questo), anche se sembra che ci sia un'API C #. Il POI di Apache viene mantenuto attivamente.
  • JXL non supporta la formattazione condizionale, Apache POI lo fa, anche se questo non è così significativo, perché puoi formattare in modo condizionale le celle con il tuo codice.
  • JXL non supporta ricco di testo formattazione, vale a dire la formattazione diversa all'interno di una stringa di testo; Apache POI lo supporta.
  • JXL supporta solo alcune rotazioni del testo: orizzontale / verticale, +/- 45 gradi e impilato; Apache POI supporta qualsiasi numero intero di gradi più stacked.
  • JXL non supporta il disegno di forme; Apache POI fa.
  • JXL supporta la maggior parte delle impostazioni di Imposta pagina come Orizzontale / Verticale, Margini, Formato carta e Zoom. Apache POI supporta tutto ciò oltre a righe e colonne ripetute.
  • JXL non supporta i riquadri divisi; Apache POI fa.
  • JXL non supporta la creazione o la manipolazione di grafici; quel supporto non è ancora disponibile in Apache POI, ma un'API sta lentamente iniziando a formarsi.
  • Apache POI ha una serie più ampia di documentazione ed esempi disponibile rispetto a JXL.

Inoltre, POI contiene non solo l'API principale "usermodel", ma anche un'API basata sugli eventi se tutto ciò che vuoi fare è leggere il contenuto del foglio di calcolo.

In conclusione, grazie alla migliore documentazione, più funzionalità, sviluppo attivo e supporto per il formato Excel 2007+, utilizzo Apache POI.


Grazie per l'elaborata spiegazione.
Swagatika

8
+1 per chiaro, conciso ed estremamente utile
Ron

1
il getContents()metodo sporco in JExcelAPI mi fa risparmiare un sacco di tempo. Con POI, devi controllare il suo tipo di cella, quindi ottenere il suo valore (se è una cella numerica, devi controllare se è una cella Data) in base al suo tipo e infine convertirlo in valore stringa con metodi diversi, è così scomodo. Non riesco a immaginare che POI non fornisca un metodo così sporco ma conveniente come fa JExcelAPI.
LiuYan 刘 研

1
Una cosa molto positiva se il POI è la lettura basata sugli eventi. Soprattutto sui dispositivi mobili (= Android), questo aiuta molto quando si ha a che fare con dimensioni di heap limitate e GC. La lettura di un semplice XLS con JXL spesso raggiungeva il limite di memoria dell'app, causando l'arresto anomalo dell'app.
dermatthias

2
Uno dei fattori importanti che mi ha spinto a migrare a POI è la flessibilità di utilizzare l'API di steaming, che è un must quando si desidera leggere Excel con enormi quantità di dati. Non vorresti che i dati complessivi vengano caricati in memoria quando apri Excel, se i dati in Excel sono enormi. Con lo streaming, l'intero contenuto del tuo documento Excel / qualsiasi documento Office non verrà caricato in memoria immediatamente dopo aver analizzato il foglio.
Ashok Koyi

12

Ho usato POI.

Se lo usi, tieni d'occhio quei formattatori di celle: creane uno e usalo più volte invece di crearlo ogni volta per cella, è un'enorme differenza di consumo di memoria o dati di grandi dimensioni.


5

Non ho familiarità con JXL e usiamo POI. Il POI è ben mantenuto e può gestire sia il formato .xls binario che il nuovo formato basato su xml introdotto in Office 2007.

I file CSV non sono file Excel, sono file basati su testo, quindi queste librerie non li leggono. Dovrai analizzare tu stesso un file CSV. Non sono a conoscenza di alcuna libreria di file CSV, ma non ho nemmeno guardato.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.