Je suis sur le point d'ajouter une section à une application ASP.NET (VB.NET codebehind) qui permettra à un utilisateur de récupérer des données sous forme de fichier Excel, que je générerai en fonction des données de la base de données. Bien qu'il existe plusieurs façons de procéder, chacune a ses propres inconvénients. Comment retourneriez- vous les données? Je recherche quelque chose d'aussi clair et simple que possible.
asp.net
vb.net
export-to-excel
Dan Coates
la source
la source
Réponses:
CSV
Avantages:
Les inconvénients:
HTML
Avantages:
Les inconvénients:
OpenXML (Office 2007 .XLSX)
Avantages:
Les inconvénients:
SpreadSheetML (XML au format ouvert)
Avantages:
Les inconvénients:
XLS (généré par un composant tiers)
Avantages:
Les inconvénients:
Interopérabilité COM
Avantages:
Les inconvénients:
la source
Vous pouvez générer les données sous forme de cellules de tableau html, y coller une extension
.xls
ou.xlsx
, et Excel l'ouvrira comme s'il s'agissait d'un document natif. Vous pouvez même effectuer un formatage limité et des calculs de formule de cette façon, c'est donc beaucoup plus puissant que CSV. De plus, la sortie d'une table html devrait être assez facile à faire à partir d'une plate-forme Web comme ASP.Net;)Si vous avez besoin de plusieurs feuilles de calcul ou feuilles de calcul nommées dans votre classeur Excel, vous pouvez faire quelque chose de similaire via un schéma XML appelé
SpreadSheetML
. Ce n'est pas le nouveau format fourni avec Office 2007, mais quelque chose de complètement différent qui fonctionne aussi loin que Excel 2000. Le moyen le plus simple d'expliquer comment cela fonctionne est avec un exemple:la source
Si vous venez d'un DataTable :
À partir d'un Gridview :
la source
Ceci est un wrapper gratuit autour de SpreadML - cela fonctionne très bien.
http://www.carlosag.net/Tools/ExcelXmlWriter/
la source
Sur la base des réponses données et de la consultation des collègues, il semble que la meilleure solution consiste à générer un fichier XML ou des tableaux HTML et à le pousser vers le bas en tant que pièce jointe. Le seul changement recommandé par mes collègues est que les données (c'est-à-dire les tables HTML) peuvent être écrites directement dans l'objet Response, éliminant ainsi le besoin d'écrire un fichier, ce qui peut être gênant en raison de problèmes d'autorisations, E / S conflit, et s'assurer que la purge programmée a lieu.
Voici un extrait du code ... Je n'ai pas encore vérifié cela, et je n'ai pas fourni tout le code appelé, mais je pense que cela représente bien l'idée.
la source
comme Excel comprend le HTML, vous pouvez simplement écrire les données sous forme de tableau HTML dans un fichier temporaire avec une extension .xls, obtenir le FileInfo pour le fichier et le renvoyer en utilisant
si vous vouliez éviter le fichier temporaire, vous pouvez écrire dans un flux en mémoire et réécrire les octets au lieu d'utiliser WriteFile
si l'en-tête content-length est omis, vous pouvez simplement réécrire le code HTML directement, mais cela peut ne pas fonctionner correctement tout le temps dans tous les navigateurs
la source
Personnellement, je préfère la méthode XML. Je vais retourner les données de la base de données dans un ensemble de données, les enregistrer dans XMl, puis je crée un fichier xslt qui contient une règle de transformation qui formatera un document approprié, et une simple transformation XML terminera le travail. La meilleure partie de cela, vous pouvez formater les cellules, effectuer une mise en forme conditionnelle, configurer les en-têtes et les pieds de page et même définir des plages d'impression.
la source
Je l'ai fait plusieurs fois et à chaque fois, le moyen le plus simple était de simplement renvoyer un fichier CSV (Comma Separated Value). Excel l'importe parfaitement, et c'est relativement rapide à faire.
la source
nous exportons les données d'une grille de données pour exceller tout le temps. Le convertir en HTML puis l'écrire dans un fichier Excel
Le seul problème avec cette méthode était que beaucoup de nos grilles contenaient des boutons ou des liens, vous en avez donc besoin aussi:
J'ai trouvé que quelque part, ça marche bien.
la source
Je recommande la bibliothèque de génération excel open source gratuite basée sur OpenXML
Cela m'a aidé il y a plusieurs mois.
la source
Voici un rapport qui provient d'une procédure stockée. Les résultats sont exportés vers Excel. Il utilise ADO au lieu d'ADO.NET et la raison pour laquelle cette ligne
Il fait la majeure partie du travail et n'est pas disponible sur ado.net.
la source
Si vous remplissez un GridView avec des données, vous pouvez utiliser cette fonction pour obtenir les données au format HTML, mais en indiquant au navigateur qu'il s'agit d'un fichier Excel.
la source
Évitez simplement COM Interop via l'espace de noms Microsoft.Office.Interop. C'est tellement lent et peu fiable et non évolutif. Non applicable pour les masochistes.
la source
Vous pouvez créer des fichiers Excel joliment formatés en utilisant cette bibliothèque, assez facilement: http://officehelper.codeplex.com/documentation .
Microsoft Office n'a pas besoin d'être installé sur le serveur Web!
la source
CSV est le moyen le plus simple. La plupart du temps, il est lié à Excel. Sinon, vous devez utiliser les API d'automatisation ou le format XML. Les API et XML ne sont pas si difficiles à utiliser.
Informations sur la génération de XML pour Excel
la source
Je vais soit sur la route CSV (comme décrit ci-dessus), soit plus souvent ces jours-ci, j'utilise Infragistics NetAdvantage pour générer le fichier. (La très grande majorité du temps où Infragistics est en jeu, nous exportons simplement un UltraWebGrid existant, qui est essentiellement une solution à une seule LOC, sauf si des ajustements de formatage supplémentaires sont nécessaires. Nous pourrions également générer manuellement un fichier Excel / BIFF, mais il y en a rarement besoin.)
la source
man, dans .net, je suppose que vous pourriez avoir un composant qui pourrait le faire, mais dans asp classique, je l'ai déjà fait en créant une table html et en changeant le tipe mime de la page en vnd / msexcel. Je suppose que si vous utilisez un gridview et changez le type mime, cela devrait peut-être fonctionner, car le gridview est une table html.
la source
Le seul moyen à toute épreuve d'éviter les triangles verts «On dirait que ces nombres sont stockés sous forme de texte» est d'utiliser le format Open XML. Cela vaut la peine de l'utiliser, juste pour éviter les inévitables triangles verts.
la source
La meilleure méthode que j'ai vue pour les rapports Excel est d'écrire les données en XML avec une extension XML et de les diffuser aux clients avec le type de contenu approprié. (application / xls)
Cela fonctionne pour tout rapport qui nécessite un formatage de base et vous permet de comparer avec des feuilles de calcul existantes à l'aide d'outils de comparaison de texte.
la source
En supposant qu'il s'agit d'un intranet, où vous pouvez définir des autorisations et mandater IE, vous pouvez générer le côté client du classeur avec JScript / VBScript pilotant Excel . Cela vous donne un formatage Excel natif, sans avoir à essayer d'automatiser Excel sur le serveur.
Je ne suis pas sûr de recommander vraiment cette approche, sauf dans des scénarios assez spécialisés, mais c'était assez courant à l'apogée de l'ASP classique.
la source
Vous pouvez bien sûr toujours opter pour des composants tiers. Personnellement, j'ai eu une bonne expérience avec Spire.XLS http://www.e-iceblue.com/xls/xlsintro.htm
Le composant est assez facile à utiliser dans votre application:
la source
L'un des problèmes que j'ai rencontrés en utilisant l'une des solutions suggérées ci-dessus qui sont similaires à cette réponse est que si vous transférez le contenu en tant que pièce jointe (ce que j'ai trouvé être la solution la plus propre pour les navigateurs non-ms) , puis ouvrez-le dans Excel 2000-2003, son type est une "Page Web Excel" et non un document Excel natif.
Ensuite, vous devez expliquer aux utilisateurs comment utiliser "Enregistrer en tant que type" à partir d'Excel pour le convertir en un document Excel. C'est pénible si les utilisateurs doivent modifier ce document, puis le télécharger à nouveau sur votre site.
Ma recommandation est d'utiliser CSV. C'est simple et si les utilisateurs l'ouvrent à partir d'Excel, Excel les invite au moins à l'enregistrer dans son format natif.
la source
Je créerais simplement un fichier CSV basé sur les données, car je considère que c'est le plus propre et Excel le prend en charge. Mais si vous avez besoin d'un format plus flexible, je suis sûr qu'il existe des outils tiers pour générer de vrais fichiers Excel.
la source
Voici une solution qui diffuse la table de données en tant que CSV. Rapide, propre et facile, et il gère les virgules dans l'entrée.
la source
vient de créer une fonction pour exporter à partir d'un formulaire Web C # pour exceller en espérant que cela aide les autres
la source
Si vous devez utiliser Excel au lieu d'un fichier CSV, vous devrez utiliser l'automatisation OLE sur une instance Excel sur le serveur. Le moyen le plus simple de le faire est d'avoir un fichier modèle et de le remplir par programme avec les données. Vous l'enregistrez dans un autre fichier.
Conseils:
Certaines des approches «utiliser des types mime pour tromper Excel en ouvrant un tableau HTML» fonctionneraient si cela ne vous dérange pas que le format du fichier soit un peu basique. Ces approches génèrent également le gros travail du processeur sur le client. Si vous voulez un contrôle fin sur le format de la feuille de calcul, vous devrez probablement utiliser Excel lui-même pour générer le fichier comme décrit ci-dessus.
la source