web-dev-qa-db-fra.com

Quelle est la meilleure API pour lire des feuilles Excel dans Java - POI JXL ou Apache

Laquelle des 2 API est la plus simple à lire/écrire/éditer des feuilles Excel? Ces API ne prennent-elles pas en charge les extensions CSV?

En utilisant JXL pour file.xls et file.xlsx, je reçois une exception comme:

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)

Pour les extensions .xls et .xlsx. Java Version que j'utilise est: JDK1.6

91
Swagatika

J'ai utilisé à la fois JXL (maintenant "JExcel") et Apache POI . Au début, j’utilisais JXL, mais maintenant j’utilise Apache POI.

Premièrement, voici les cas où les deux API ont la même fonctionnalité finale:

  • Les deux sont gratuits
  • Style de cellule: alignement, arrière-plans (couleurs et motifs), bordures (types et couleurs), prise en charge des polices (noms de police, couleurs, taille, gras, italique, barré, souligné)
  • Formules
  • Les hyperliens
  • Régions de cellules fusionnées
  • Taille des lignes et des colonnes
  • Formatage des données: chiffres et dates
  • Habillage du texte dans les cellules
  • Congeler les vitres
  • Support d'en-tête/pied de page
  • Lecture/écriture de feuilles de calcul existantes et nouvelles
  • Les deux tentent de conserver les objets existants dans les feuilles de calcul et se lisent intacts autant que possible.

Cependant, il existe de nombreuses différences:

  • La différence la plus significative est peut-être que Java JXL ne prend pas en charge le format Excel 2007+ ".xlsx"; il ne supporte que l'ancien format BIFF (binaire) ".xls". Apache POI prend en charge les deux avec une conception commune.
  • De plus, la partie Java de l'API JXL a été mise à jour pour la dernière fois en 2009 (il y a 3 ans et 4 mois au moment de l'écriture), bien qu'il semble qu'il existe une API C #. Apache POI est activement maintenu.
  • JXL ne prend pas en charge la mise en forme conditionnelle, contrairement aux POI Apache, bien que cela ne soit pas significatif, car vous pouvez formater des cellules de manière conditionnelle avec votre propre code.
  • JXL ne prend pas en charge le formatage enrichi text , c’est-à-dire un formatage différent dans une chaîne de texte; Apache POI le prend en charge.
  • JXL ne prend en charge que certaines rotations de texte: horizontal/vertical, +/- 45 degrés et superposé; Apache POI prend en charge n’importe quel nombre entier de degrés plus une pile.
  • JXL ne prend pas en charge le dessin de formes; Apache POI fait.
  • JXL prend en charge la plupart des paramètres de mise en page, tels que Paysage/Portrait, Marges, Taille du papier et Zoom. Les POI Apache prennent en charge tout cela, plus des lignes et des colonnes répétitives.
  • JXL ne prend pas en charge les volets divisés; Apache POI fait.
  • JXL ne prend pas en charge la création ou la manipulation de graphiques; ce support n'existe pas encore dans les points d'intérêt Apache, mais une API commence lentement à se former.
  • Apache POI dispose d'un ensemble plus complet de documentation et d'exemples que JXL.

De plus, POI contient non seulement la principale API "usermodel", mais également une API basée sur des événements si vous ne souhaitez que lire le contenu de la feuille de calcul.

En conclusion, en raison d'une meilleure documentation, de davantage de fonctionnalités, d'un développement actif et de la prise en charge du format Excel 2007+, j'utilise Apache POI.

250
rgettman

J'ai utilisé POI.

Si vous l'utilisez, gardez l'œil sur ces formateurs de cellules: créez-en un et utilisez-le plusieurs fois au lieu de créer à chaque fois pour cellule, c'est une énorme différence de consommation de mémoire ou de données volumineuses.

12
user529543

Je ne suis pas familier avec JXL et nous utilisons POI. Les POI sont bien gérés et peuvent gérer à la fois le format binaire .xls et le nouveau format basé sur XML introduit dans Office 2007.

Les fichiers CSV ne sont pas des fichiers Excel, mais des fichiers texte. Ces bibliothèques ne les lisent donc pas. Vous devrez analyser un fichier CSV vous-même. Je ne connais aucune bibliothèque de fichiers CSV, mais je n'ai pas regardé non plus.

5
jwesley

Pour lire des fichiers "simples" CSV en Java, il existe une bibliothèque appelée OpenCSV, disponible ici: http://opencsv.sourceforge.net/

1
Jerry Oberle