Quelle est la meilleure façon de créer un tableau Excel avec C#?
J'ai quelques données tabulaires que j'aimerais tourner dans un tableau Excel.
Logiciel disponible:
- .NET 4 (C#)
- Excel 2010 (en utilisant Excel API est OK)
- Je préfère ne pas utiliser un 3ème partie les bibliothèques
Des informations sur les données:
- Quelques millions de lignes de
- 5 colonnes, toutes les chaînes (très simple et régulier de la structure de la table)
- Dans mon script, je suis actuellement à l'aide d'une Liste imbriquée structure de données, mais je peux changer que
- Performance du script n'est pas critique
La recherche en ligne donne de nombreux résultats, et je suis confus si je dois utiliser la OleDb, des jeux d'enregistrements ADO, ou quelque chose d'autre. Certaines de ces technologies sembler excessif pour mon scénario, et certains semblent comme ils sont peut-être obsolètes.
Quelle est la façon la plus simple de faire cela?
Modifier: c'est un script que j'ai l'intention de les exécuter à partir de mon participé à de bureau.
La façon la plus simple consiste à une vie décente à la 3e partie de la bibliothèque 🙂 Regardez pour "excel automation". Il devrait y avoir quelques articles de base de connaissances sur MSDN. Être conscient que l'utilisation de l'Excel COM interops sont significativement plus lent que la plupart/tous les 3ème partie outils et s'attendre à exécuter dans un non-service de l'environnement, etc. Il peut aussi y avoir des problèmes avec les traitant de "quelques millions de lignes" (jamais essayé n'importe où près de ces limites!), même en excluant la ressource complémentaire/surcharge de temps-pas criticial n'exclut pas "un jour, aujourd'hui" 🙂
Aussi, pour un simple dump, envisager CSV -> Excel (manuellement ou via l'automatisation) au lieu d'ajouter toutes les lignes d'un-à-un-temps (un couple de millions de dollars est un couple de millions de dollars!). Une autre option est de dumping directement à XSLX (XML, il suffit de saisir un "modèle") via un streaming écrivain, etc. Bien sûr, ces étape est tout simplement pas présents dans la 3e partie de la bibliothèque.
Quelle est votre approche pour raccord de "quelques millions de lignes de" dans les 1 048 576 lignes je vois dans ma feuille de calcul Excel 2010? Je suis d'accord avec Tyler dans les dépenses de l'argent sur un tiers de la bibliothèque comme Aspose.Les cellules .NET (Développeur de l'Entreprise d'Abonnement de $899).
Merci pour les alertes sur le nombre maximal de lignes 1 million de dollars. Au moment où le tableau a 900k lignes, donc, on dirait que je viens de faire. (La Performance est très bonne d'ailleurs, même quand je créer un tableau croisé dynamique).
Aussi, pour un simple dump, envisager CSV -> Excel (manuellement ou via l'automatisation) au lieu d'ajouter toutes les lignes d'un-à-un-temps (un couple de millions de dollars est un couple de millions de dollars!). Une autre option est de dumping directement à XSLX (XML, il suffit de saisir un "modèle") via un streaming écrivain, etc. Bien sûr, ces étape est tout simplement pas présents dans la 3e partie de la bibliothèque.
Quelle est votre approche pour raccord de "quelques millions de lignes de" dans les 1 048 576 lignes je vois dans ma feuille de calcul Excel 2010? Je suis d'accord avec Tyler dans les dépenses de l'argent sur un tiers de la bibliothèque comme Aspose.Les cellules .NET (Développeur de l'Entreprise d'Abonnement de $899).
Merci pour les alertes sur le nombre maximal de lignes 1 million de dollars. Au moment où le tableau a 900k lignes, donc, on dirait que je viens de faire. (La Performance est très bonne d'ailleurs, même quand je créer un tableau croisé dynamique).
OriginalL'auteur RexE | 2011-01-22
Vous devez vous connecter pour publier un commentaire.
Honorer votre demande pour éviter 3ème partie outils et d'utiliser les objets COM, voici comment je ferais.
Microsoft Excel 11.0.
Haut de module d'ajouter:
Ajouter de la logique de l'événement comme ceci:
Merci pour l'écrire, le Rap! Je vais essayer sur un petit échantillon et voir comment il se compare à l'automatisation d'un fichier CSV dans Excel.
OriginalL'auteur Rap
Éviter à l'aide de COM interop à tout prix. Utiliser une API tierce. Vraiment. En fait, si vous faites de ce côté-serveur, n'ont pratiquement. Il ya beaucoup d'options libres. Je recommande fortement d'utiliser EPPlus, mais il y a aussi au niveau de l'entreprise des solutions disponibles. J'ai utilisé EPPlus une bonne quantité, et il fonctionne très bien. Contrairement à l'interopérabilité, il permet de générer des fichiers Excel sans exiger Excel soit installé sur la machine, ce qui signifie aussi que vous n'avez pas à vous soucier des objets COM pour rester dans les parages en tant que processus d'arrière-plan. Même avec un bon objet d'aliénation, de l'Excel processus n'a pas toujours la fin.
http://epplus.codeplex.com/releases/view/42439
Je sais que vous avez dit que vous voulez éviter les bibliothèques de tiers, mais ils sont vraiment la voie à suivre. Microsoft ne recommande pas l'automatisation de Bureau. C'est vraiment pas destiné à être automatisé, de toute façon.
http://support.microsoft.com/kb/257757
Cependant, vous pouvez vouloir reconsidérer l'insertion de "quelques millions de lignes dans une feuille de calcul unique.
Je ne l'ai jamais fait, je ne connais aucune des bibliothèques qui le prennent en charge. Peu importe, OP devraient probablement reconsidérer l'insertion d'un couple millions d'enregistrements dans une seule feuille de calcul.
+1 pour ma douleur et de la souffrance lorsque je l'ai utilisé COM interop pour cela. Jamais encore.
OriginalL'auteur Tyler Treat
Une fois, j'ai lu que la meilleure façon de créer un tableau Excel a été à réellement écrire un tableau HTML, y compris sa structure et de données, et tout simplement le nom du fichier
.xls
.Excel sera en mesure de le convertir, mais il affiche un avertissement indiquant que le contenu ne correspond pas à l'extension.
OriginalL'auteur Pierre-Alain Vigeant
Certaines choses pour votre considération...
Si c'est un client à côté de la solution, il n'y a rien de mal avec l'aide de Interops.
Si c'est une solution côté serveur, Ne pas utiliser de Interops. Une bonne alternative est SDK OpenXML de Microsoft si vous ne voulez pas de 3ème partie de la solution. C'est gratuit. Je crois que le dernier a le même modèle d'objet Excel. C'est beaucoup plus rapide, BEAUCOUP, à la génération de l'classeur vs allez le interops façon qui peut ralentir votre serveur.
OriginalL'auteur Jimmy Chandra
Je suis d'accord qu'un 3e partie de la dll serait plus que de la com, mais si vous allez l'interopérabilité route...
Mains vers le bas la meilleure façon de remplir une feuille excel est d'abord de mettre les données en 2 dimensions tableau de chaîne, puis obtenir une plage excel objet avec les mêmes dimensions et la définir (gamme.set_value2(oarray) je pense). À l'aide de toute autre méthode est affreusement lent.
Assurez-vous également d'utiliser le code de nettoyage dans votre bloc finally.
OriginalL'auteur Malk
j'ai mis en place "exporter vers Excel" avec le ms-access-ole-db-pilote qui peut aussi lire et écrire des fichiers excel de la façon suivante:
de la préparation (en fait une fois)
La mise en œuvre d'exportation
Exemple
J'ai utilisé cette chaîne de connexion
OriginalL'auteur k3b