184 votes

Importation et exportation d'Excel - Quelle est la meilleure bibliothèque ?

Dans une de nos applications ASP.NET en C#, nous prenons une certaine collection de données (collection SubSonic) et l'exportons vers Excel. Nous voulons également importer des fichiers Excel dans un format spécifique. Je suis à la recherche d'une bibliothèque que je peux utiliser à cette fin.

Exigences :

  • Fichiers Excel 2007 (Excel 2003 prend-il en charge plus de 64 000 lignes ? J'ai besoin de plus que cela).
  • Ne nécessite pas Excel sur le serveur
  • Prend une collection tapée et, s'il le peut, essaie de mettre les champs numériques comme numériques dans Excel.
  • Fonctionne bien avec les gros fichiers (100k à 10M) - assez rapide.
  • Ne se plante pas lors de l'exportation de GUIDs !
  • Ne coûte pas un prix exorbitant (pas de bibliothèque d'entreprise comme aspose). La gratuité est toujours une bonne chose, mais il peut s'agir d'une bibliothèque commerciale.

Quelle bibliothèque recommandez-vous ? L'avez-vous utilisée pour de grandes quantités de données ? Existe-t-il d'autres solutions ?

Pour l'instant, j'utilise un outil simple qui génère du HTML qui est chargé par Excel par la suite, mais je perds certaines capacités, et Excel se plaint lorsque nous le chargeons. Je n'ai pas besoin de générer des graphiques ou quoi que ce soit d'autre, juste d'exporter des données brutes.

Je pense à des fichiers CSV plats, mais Excel est une exigence du client. Je peux travailler avec CSV directement, si j'avais un outil pour convertir vers et depuis Excel. Étant donné qu'Excel 2007 est un format de fichier basé sur le xml (et zippé), je suppose que ce type de bibliothèque devrait être facile à trouver. Cependant, ce qui m'importe le plus, ce sont vos commentaires et opinions.


EDIT : Ironiquement, à mon avis et suivant la réponse avec le plus de votes, la meilleure bibliothèque d'import-export d'Excel est de ne pas exporter du tout. Ce n'est pas le cas pour tous les scénarios, mais c'est le cas pour le mien. Les fichiers XLS ne supportent que 64k lignes. XLSX supporte jusqu'à 1M. Les bibliothèques gratuites que j'ai essayées ont des performances médiocres (une seconde pour charger une ligne lorsque vous avez 200 000 lignes). Je n'ai pas essayé les bibliothèques payantes, car j'ai l'impression qu'elles sont trop chères pour la valeur qu'elles offrent lorsque tout ce dont vous avez besoin est une routine de conversion XLSX<->CSV rapide.

18 votes

"Étant donné qu'Excel 2007 est un format de fichier basé sur le xml (et zippé), je suppose que ce genre de bibliothèque devrait être facile à trouver" -- hah ! C'est comme dire "Excel 97 est basé sur les octets, donc ce genre de bibliothèque devrait être facile à trouver". XML n'implique pas la simplicité, et OOXML est l'exemple type de la façon de rendre XML sous-spécifié et indéchiffrablement complexe :-)

0 votes

En fait, vous n'avez pas tout à fait raison de faire cette supposition. Il existe des outils qui permettent de construire très facilement un document OOXML bien formé, au moins pour XLSX, avec C#.NET.

3 votes

J'ai créé une proposition de site pour donner aux questions de ce genre un foyer officiel loin de Stack Overflow. Il s'appelle Recommandations du code Aidez-nous à en faire une réalité en adhérant et en posant des questions dès maintenant !

42voto

cdonner Points 17403

J'ai découvert le SDK Open XML depuis ma réponse initiale. Il fournit des classes fortement typées pour les objets de tableur, entre autres choses, et semble assez facile à utiliser. Je vais l'utiliser pour les rapports dans l'un de mes projets. Hélas, la version 2.0 n'est pas censée sortir avant fin 2009 ou 2010.

0 votes

Très intéressant ! L'avez-vous testé en utilisant de grandes quantités de données ?

0 votes

Je n'ai pas fait de test de performance. J'utilise principalement des graphiques et des rapports d'une seule page, donc le débit n'est pas un problème pour moi. Il semble être aussi rapide que le code géré peut l'être, cependant.

1 votes

@Jason Kealey : c'est vraiment la meilleure réponse à ce message - l'exportation n'est pas pertinente avec SpreadsheetML. Les données sont toutes accessibles à partir du fichier. Si vous avez besoin des données dans un format différent, fournissez une transformation via un XSLT ou via Linq.

40voto

Travis Points 6062

Je vais me prononcer en faveur des fichiers csv plats, ne serait-ce que parce que vous avez le plus grand contrôle sur le code. Assurez-vous simplement de lire les lignes et de les traiter une par une (lire le document jusqu'à la fin et le diviser va consommer toute votre mémoire - idem pour l'écriture, faites du streaming).

Oui, l'utilisateur devra enregistrer le fichier CSV dans Excel avant de pouvoir le traiter, mais peut-être cette limitation peut-elle être surmontée par une formation et des instructions claires sur la page ?

Enfin, lorsque vous exportez vers le client, si vous définissez le type MIME sur texte/csv, Excel est généralement associé à ce type, de sorte que l'utilisateur a l'impression qu'il s'agit d'un "fichier Excel".

0 votes

Je suis d'accord, mais dans mon cas, il serait bon de supporter directement les fichiers xls(x). Cependant, connaissez-vous des outils csv <-> xls(x) ?

0 votes

Non, je n'ai jamais eu besoin de faire du xls. Désolé :-/

4 votes

J'ai également essayé l'approche CSV, mais elle pose plusieurs problèmes. Par exemple, que se passe-t-il si vous voulez avoir un texte de plusieurs lignes dans une cellule ? Je n'ai pas réussi à faire importer un tel CSV par Excel.

36voto

Mohannad Otaibi Points 341

La dernière version d'ExcelPackage qui est libre sous LGPL pour les projets commerciaux est, https://www.nuget.org/packages/EPPlus/4.5.3.3

Si vous avez besoin de la dernière et meilleure version, la licence commerciale est disponible ici : https://epplussoftware.com/en/LicenseOverview/

Je me bats toujours avec la fonction d'exportation vers Excel, car mon application doit exporter certaines données vers un modèle Excel 2007.

ce projet me semble correct, et le développeur est très réactif aux bugs et aux problèmes.

3 votes

Il fonctionne bien, mais il est sous licence GPL - c'est-à-dire que tout logiciel l'utilisant doit être disponible en code source brut, aussi.... pas toujours un bon choix...

1 votes

Exportez dans un format natif qui vous convient, écrivez un programme qui utilise EPPlus pour convertir en Excel, rendez-le gratuit. Faites en sorte que votre programme principal l'utilise par défaut, mais autorisez d'autres "plugins", et voilà que votre code réel est libre de la GPL.

7 votes

Il semble qu'il soit maintenant sous licence LGPL, vous pouvez donc l'utiliser comme une bibliothèque liée sans les restrictions du copyleft.

14voto

Joe Erickson Points 4571

SpreadsheetGear pour .NET lit et écrit des fichiers CSV / XLS / XLSX et fait plus encore.

Vous pouvez voir des échantillons ASP.NET en direct avec le code source C# et VB. ici et téléchargez un essai gratuit ici .

Bien sûr, je pense que SpreadsheetGear est la meilleure bibliothèque pour importer/exporter des classeurs Excel en ASP.NET - mais je suis partial. Vous pouvez voir ce que certains de nos clients disent à droite de l'écran. cette page .

Clause de non-responsabilité : Je suis propriétaire de SpreadsheetGear LLC.

0 votes

@Joe Erickson : Pouvez-vous nous dire comment lire un CSV, puis produire un XML à partir du CSV lu en utilisant Spreadsheetgear et en utilisant ce XLS pour produire un fichier XML résultant qui contient cette structure ? Ou peut-on utiliser Spreadsheetgear pour produire un XML à partir d'un CSV directement ?

13voto

stormwild Points 111

0 votes

J'ai utilisé cette bibliothèque l'autre jour pour étudier cette question. C'est une excellente bibliothèque !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X