Importer et exporter Excel - Quelle est la meilleure bibliothèque? [fermé]


180

Dans l'une de nos applications ASP.NET en C #, nous prenons une certaine collection de données (collection SubSonic) et l'exportons vers Excel. Nous souhaitons également importer des fichiers Excel dans un format spécifique. Je recherche une bibliothèque que je puisse 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, si c'est possible, essaie de mettre des champs numériques comme numériques dans Excel.
  • Fonctionne bien avec des fichiers volumineux (100k à 10M) - assez rapidement.
  • Ne plante pas lors de l'exportation des GUID!
  • Ne coûte pas cher (pas de bibliothèque d'entreprise comme aspose). La gratuité est toujours excellente, mais peut être une bibliothèque commerciale.

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

À l'heure actuelle, j'utilise un outil simple qui génère du HTML qui est chargé par Excel plus tard, mais je perds certaines fonctionnalité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 du genre, il suffit d'exporter des données brutes.

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


EDIT: Ironiquement, à mon avis et suite à la réponse avec le plus de votes, la meilleure bibliothèque d'importation et d'exportation Excel n'est pas du tout d'exportation. Ce n'est pas le cas pour tous les scénarios, mais c'est pour le mien. Les fichiers XLS ne prennent en charge que 64 000 lignes. XLSX prend en charge jusqu'à 1M. Les bibliothèques gratuites que j'ai essayées présentent de mauvaises performances (une seconde pour charger une ligne lorsque vous avez 200 000 lignes). Je n'ai pas essayé les versions payantes, car j'estime 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
"Étant donné qu'Excel 2007 est un format de fichier basé sur xml (et zippé), je suppose que ce type de bibliothèque devrait être facile à trouver" - hah! C'est comme dire "Excel 97 est basé sur des octets, donc ce type de bibliothèque devrait être facile à trouver". XML n'implique pas la simplicité, et OOXML est l'enfant de l'affiche pour savoir comment rendre XML sous-spécifié et indéchiffrable complexe. :-)
Ken

En fait, vous n'avez pas entièrement raison de faire cette hypothèse. Il existe des outils disponibles qui permettent de créer un document OOXML bien formé, au moins pour XLSX, très facile à faire avec C # .NET.
Type anonyme

3
J'ai créé une proposition de site pour donner à des questions comme celle-ci une maison officielle loin de Stack Overflow. Cela s'appelle Recommandations de code Aidez à en faire une réalité en vous joignant et en posant des questions maintenant!
daviewales

Qu'en est-il de Spire.xls. C'est seulement 800 $ pour l'édition Pro. Vous obtenez toutes vos conversions ainsi que votre import ou exportateur Excel. e-iceblue.com/Introduce/…
DotNet Programmer

GemBox.Spreadsheet est une autre solution qui vaut la peine d'être vérifiée , super rapide et propose des versions gratuites et professionnelles. De plus, la version pro est plutôt bon marché et n'a pas de coûts de déploiement cachés comme la plupart d'entre eux.
NixonUposseen

Réponses:


41

Je vais jeter ma main pour les 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 (la lecture du document jusqu'à la fin et le fractionnement consommeront toute votre mémoire - comme pour l'écriture, diffusez-le).

Oui, l'utilisateur devra enregistrer au format CSV dans Excel avant de pouvoir le traiter, mais peut-être que cette limitation peut être surmontée en formant et en fournissant des instructions claires sur la page?

Enfin, lorsque vous exportez vers le client, si vous définissez le type mime sur text / csv, Excel est généralement mappé à ce type afin qu'il apparaisse à l'utilisateur comme un «fichier Excel».


4
J'ai également essayé l'approche CSV, mais elle pose plusieurs problèmes. Par exemple, que faire si vous souhaitez avoir un texte multiligne dans une cellule? Je ne pouvais pas faire en sorte qu'Excel importe un tel CSV.
Igor Brejc

23
CSV a sa place mais l'affiche a posé des questions sur Excel, je suppose qu'il doit vouloir Excel, pas CSV.
John Scipione

7
CSV tombe lors de l'exportation de colonnes telles que 0345. Excel réduit automatiquement ce chiffre à 345. Ce qui n'est pas du tout utile lorsque ce chiffre principal est important.
NotMe

2
Le tableau HTML avec une extension de fichier Excel semble très bien fonctionner ... il analysera certains CSS d'une manière particulière pour des choses comme le formatage de plusieurs lignes, couleurs, etc. - sans avoir à créer un fichier Excel natif
Oskar Duveborn

3
"Enregistrer sous"? Non. Si le client utilise Excel, pourquoi devrait-il économiser un deuxième fichier beaucoup plus limité pour interagir avec votre produit?
mlibby le

41

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


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

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

1
@Jason Kealey: c'est vraiment la meilleure réponse sur ce post - l'exportation devient inutile 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.
Todd Main

1
Cela ne fonctionne pas du tout pour les fichiers ".xls".
quillbreaker

github.com/OfficeDev/Open-XML-SDK, il est maintenant open source et hébergé sur github (j'aime où MS se dirige récemment)
Alex

34

la nouvelle version d'ExcelPackage est ici http://EPPlus.codeplex.com

Je me bats toujours avec la fonction d'exportation vers Excel puisque mon application devrait exporter certaines données vers Excel-template 2007

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


3
Fonctionne bien, mais il est sous licence GPL - par exemple, tout logiciel l'utilisant doit être disponible en code source brut, aussi .... pas toujours un bon choix ...
marc_s

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

5
Il semble que cela soit maintenant sous licence LGPL, vous pouvez donc l'utiliser comme bibliothèque liée sans les restrictions de copyleft.
Brad R

Notez que si vous avez besoin de produire un fichier Excel contenant de grosses chaînes, cette bibliothèque a tendance à produire de manière aléatoire des erreurs de «contenu illisible» dans Excel.
Kevin Laity

1
Attention, EPPlus perd de la mémoire, ce n'est pas vraiment bon pour de grandes quantités de données.
user3285954

18

J'utilise ClosedXML et cela fonctionne très bien!

ClosedXML permet aux développeurs de créer plus facilement des fichiers Excel 2007/2010. Il fournit une belle manière orientée objet de manipuler les fichiers (similaire à VBA) sans avoir à gérer les tracas des documents XML. Il peut être utilisé par n'importe quel langage .NET comme C # et Visual Basic (VB).


8
J'adore l'ironie du nom ...
Jagd

Je l'ai aussi utilisé et même expérience. Fonctionne bien et est très flexible.
AnthonyVO

14

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

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

Bien sûr, je pense que SpreadsheetGear est la meilleure bibliothèque pour importer / exporter des classeurs Excel dans ASP.NET - mais je suis partial. Vous pouvez voir ce que certains de nos clients disent sur le côté droit de cette page .

Avertissement: Je possède SpreadsheetGear LLC


@Joe Erickson: Pouvez-vous dire comment on procède à la lecture d'un CSV, puis à la production d'un XML à partir du CSV juste lu en utilisant un tableur et en utilisant ce XLS pour produire un fichier XML résultant qui contient cette structure? Ou pouvons-nous utiliser Spreadsheetgear pour produire directement un XML à partir d'un CSV?
AnkitSablok


5

J'ai utilisé Flexcel dans le passé et c'était génial. Mais c'était plus pour créer et mettre à jour des feuilles de calcul Excel par programme.


Je ne vois pas que cela prend en charge Excel 2007 (xlsx). Comme xls ne prend en charge que 64 000 lignes, c'est une limitation pour moi.
Jason Kealey

@Jason Kealey - Flexcel prend désormais en charge Excel 2007 et 2010.
Pauk

5

L'exportation CSV est simple, facile à implémenter et rapide. Il y a cependant un problème potentiel à noter. Excel (jusqu'en 2007) ne conserve pas les zéros non significatifs dans les fichiers CSV. Cela déformera les codes postaux, les identifiants de produit et d'autres données textuelles contenant des valeurs numériques. Il y a une astuce qui fera qu'Excel importera correctement les valeurs (en utilisant des délimiteurs et des valeurs de préfixe avec le signe =, si je me souviens bien, par exemple .., = "02052", ...). Si vous avez des utilisateurs qui effectueront des tâches de post-traitement avec le CSV, ils doivent savoir qu'ils doivent changer le format en XLS et ne pas enregistrer le fichier au format CSV. S'ils le font, les zéros non significatifs seront définitivement perdus.


1
Pour tout ce qui doit être conservé sous forme de texte, mettez simplement un '(apostrophe) au début
phuclv

Un autre fait amusant: je ne peux pas ouvrir un fichier séparé par des virgules dans beaucoup de paramètres régionaux, comme l'allemand. Ce qui fait du csv un format médiocre pour partager des données avec des contacts internationaux
Christian Sauer

4

Pendant des années, j'utilise JExcel pour cela, un excellent projet Java open source. Il était également capable de .NET en utilisant J # pour le compiler, et j'ai également eu beaucoup de succès avec lui dans cette incarnation. Cependant, récemment, j'ai dû migrer le code vers .NET natif pour prendre en charge une application IIS 64 bits dans laquelle je crée une sortie Excel. La version J # 32 bits ne se chargerait pas.

Le code pour CSharpJExcel est LGPL et est actuellement disponible sur cette page, alors que nous nous préparons à le déployer sur le site JExcel SourceForge. Il compilera avec VS2005 ou VS2008. Les exemples de la documentation JExcel d'origine passeront assez bien intacts à la version .NET.

J'espère que cela sera utile à quelqu'un ici.


Les deux liens ne fonctionnent plus ... mais j'en ai trouvé des extraits et il semble que ce soit plus convivial pour Java, pas tellement pour les développeurs .NET. Cependant, j'ai trouvé une autre bibliothèque opposée, c'est une bibliothèque .NET native ( GemBox.Spreadsheet ), qui a également été portée en Java ( GemBox.Spreadsheet pour Java ).
Hazel Patton


3

Le site suivant montre comment exporter un DataTable, un DataSet ou une List <> dans un fichier .xlsx Excel 2007 «approprié» (plutôt que d'exporter un fichier .csv et de demander à Excel de l'ouvrir).

Il utilise les bibliothèques OpenXML, vous n'avez donc pas besoin d'installer Excel sur votre serveur.

Base de connaissances Mikes - ExportToExcel

L'ensemble du code source est fourni gratuitement , ainsi qu'une application de démonstration.

C'est très facile à ajouter à vos propres applications, il vous suffit d'appeler une fonction, en passant un nom de fichier Excel et votre source de données:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

J'espère que cela t'aides.


2

Vérifiez le projet ExcelPackage , il utilise le format de fichier Office Open XML d'Excel 2007, il est léger et open source ...


1
Ça avait l'air bien mais un commentaire dit que c'est mauvais avec des fichiers volumineux (mon scénario)
Jason Kealey

1
Intéressant - il est sous licence GPL, pas LGPL. Par conséquent, il doit être utilisé dans les applications GPL. (Aussi, dommage que le développement semble s'être arrêté.)
Jason Kealey

1
J'ai essayé ExcelPackage, mais j'ai dû l'abandonner - cela échoue lorsque vous essayez de mettre des guillemets simples (') dans une cellule.
Igor Brejc

2

J'ai essayé CSharpJExcel et je ne le recommanderais pas, du moins pas tant qu'il n'y aura pas de documentation disponible. Contrairement aux commentaires des développeurs, ce n'est pas un simple port natif.


2

Je sais que c'est assez tard, mais je me sens obligé de répondre à xPorter (écriture) et xlReader (lecture) de xPortTools.Net . Nous avons testé pas mal de bibliothèques et rien ne s'est rapproché des performances (je parle d'écrire des millions de lignes en quelques secondes ici). Je ne peux pas dire assez de bonnes choses sur ces produits!


2

Vous pouvez utiliser Microsoft.Jet.OLEDB.4.0


1
L'une de mes exigences est de ne pas avoir Excel en cours d'exécution sur le serveur.
Jason Kealey

2
je ne pense pas que ça marche !!
Soner Gönül

2
MS Office n'est pas requis pour «Microsoft.Jet.OLEDB.4.0» (pour xls) «Microsoft.ACE.OLEDB.12.0 pour xlsx». vous devez utiliser uniquement des pilotes, donc aucune chance d'exécuter Excel sur le serveur @Jason Kealey
Sanjay Goswami

1
Je l'ai utilisé pour XLS (pas l'exigence d'origine), et pour être complet ... Il y a quelques problèmes importants: (1) C'est 32 bits uniquement, vous devrez donc configurer IIS pour permettre cela. (2) Il est terriblement lent à l'exportation. (3) Il a des limites de lignes et de colonnes mal documentées. (4) Il insiste pour «renifler le type» des colonnes importées à moins que vous n'ayez accès au registre, et il se trompe généralement.
philw

1

Nous venons d'identifier un besoin similaire. Et je pense qu'il est important de considérer l'expérience utilisateur.

Nous avons presque été distraits par la même chose:

  1. Préparer / travailler dans un fichier de feuille de calcul
  2. Enregistrer le fichier
  3. Importer le fichier
  4. Travailler avec des données dans le système

... flux de travail

Add-in Express vous permet de créer un bouton dans Excel sans tout ce qui est fastidieux avec VSTO. Ensuite, le workflow devient:

  1. Préparer / travailler dans un fichier de feuille de calcul
  2. Importer un fichier (en utilisant le bouton dans Excel )
  3. Travailler avec des données dans le système

Demandez au code derrière le bouton d'utiliser l'API Excel "native" (via Add-in Express) et de le pousser directement dans le système destinataire. Vous ne pouvez pas être beaucoup plus transparent pour le développeur ou l'utilisateur. Vaut la peine d'être considéré.


1

Il y a un très bon article et une bibliothèque sur CodeProject par Yogesh Jagota:

Bibliothèque d'importation-exportation XML Excel

Je l'ai utilisé pour exporter des données à partir de requêtes SQL et d'autres sources de données vers Excel - fonctionne très bien pour moi.

À votre santé


1
Intéressant, mais nécessite des fichiers XML. Impossible de lire / écrire des fichiers xls ou xlsx.
Jason Kealey

1

Vous pouvez essayer la bibliothèque suivante, c'est assez simple et c'est juste un wrapper léger sur le SDK Open XML de Microsoft (vous pouvez même réutiliser le formatage, les styles et même des feuilles de calcul entières à partir d'un fichier Excel secondaire): http://officehelper.codeplex.com


Une nouvelle version de la bibliothèque a été publiée récemment.
aron.sinoai

0

Spreadsheetgear est la meilleure bibliothèque commerciale que nous ayons trouvée et que nous utilisons. Notre société fait beaucoup d'import et d'export Excel avancés et Spreadsheetgear prend en charge de nombreuses fonctionnalités Excel avancées bien au-delà de tout ce que vous pouvez faire avec un simple CSV, et c'est rapide. Ce n'est pas gratuit ou très bon marché mais ça vaut le coup car le support est excellent. Les développeurs vous répondront en fait si vous rencontrez un problème.


0

Que diriez-vous de la bibliothèque java Apache POI. Je ne l'ai pas utilisé pour Excel, mais je l'ai utilisé pour Word 2007.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.