9
votes

C # Excellez les données d'importation de CSV dans Excel

Comment importer des données dans Excel à partir d'un fichier CSV à l'aide de C #? En fait, ce que je veux réaliser est similaire à ce que nous faisons dans Excel, vous allez à l'onglet DATA , puis sélectionnez à partir de texte , puis utilisez le texte aux colonnes option et sélectionnez CSV et il fait la magie, et tout ce genre de choses. Je veux l'automatiser.

Si vous pouviez me diriger dans la bonne direction, j'apprécierai vraiment ça.

edit: Je suppose que je n'ai pas bien expliqué. Ce que je veux faire, c'est quelque chose comme xxx

Je veux importer ces données dans Excel, pas ma propre application. Autant que je sache, je ne pense pas que je devrais utiliser moi-même le CSV, puis les insérer dans Excel. Excel fait que pour nous . J'ai simplement besoin de savoir comment automatiser ce processus.


2 commentaires

Vous voulez donc simplement ouvrir un fichier CSV dans Excel? Ou souhaitez-vous importer des données de fichier CSV dans votre application? Ou?


Je veux juste l'ouvrir dans Excel :) et appliquer l'option "Texte à colonne" dans Excel


6 Réponses :


-1
votes

Eh bien, l'importation de CSV ne devrait pas être une grosse affaire. Je pense que la méthode la plus basique serait de le faire en utilisant des opérations de chaîne. Vous pouvez construire un analyseur assez fine à l'aide de la commande SPLIT () simple () et d'obtenir la matière dans les matrices.


3 commentaires

Assez belle mais terriblement fragile.


N'oubliez pas de cette approche que les virgules peuvent être échappées. Vous devez en tenir compte aussi


Et dans le trou de lapin des analyseurs de la CSV maison. Comment gérez-vous des fichiers CSV non valides, etc., etc.



4
votes

Je crois qu'il y a deux parties, l'une est l'opération fractionnée pour le CSV que l'autre répondeur a déjà pris en charge, ce que je ne pense pas est essentiel, mais je comprendrai de toute façon. Et le grand est l'écriture dans le fichier Excel, que j'ai pu utiliser, mais dans des circonstances spécifiques et que c'était une douleur à accomplir.

CSV est assez simple, vous pouvez faire une chaîne.split sur une virgule sépérateur si vous voulez. Cependant, cette méthode est horriblement brisée, bien que je vais admettre que je l'ai utilisée moi-même, principalement parce que je contrôle également sur les données source et que je sache qu'aucune citation ou caractères d'échappement ne sera jamais apparu. J'ai inclus un lien vers un article sur une analyse appropriée du CSV, cependant, je n'ai jamais testé la source ou audité pleinement le code moi-même. J'ai utilisé autre code par le même auteur avec succès. http://www.boyet.com/articles/csvparser.html P >

La deuxième partie est beaucoup plus complexe et était une douleur énorme pour moi. L'approche que j'ai prise était d'utiliser le pilote Jet pour traiter le fichier Excel comme une base de données, puis exécutez des requêtes SQL contre elle. Il y a quelques limitations, ce qui peut causer que cela ne correspond pas à votre objectif. Je cherchais à utiliser des modèles de fichiers Excel précieux pour afficher essentiellement des données et des fonctions prédéfinies et des graphiques. Pour accomplir cela, j'ai plusieurs onglets de données de rapport et un onglet qui est Raw_Data. Mon programme écrit à l'onglet Raw_Data, et tous les autres onglets calculent le point sur les cellules de cette table. J'irai dans une partie du raisonnement de ce comportement après le code: p>

Tout d'abord, les importations (toutes ne peuvent pas être requises, ceci est tiré à partir d'un fichier de classe plus vaste et je n'ai pas commité correctement ce qui était pour quoi): p> xxx pré>

Ensuite, nous devons définir la chaîne de connexion, ma classe a déjà une référence FileInfo à ce stade du fichier que je souhaite utiliser, de sorte que c'est ce que je passe. Il est possible de rechercher sur Google ce que tous les paramètres sont pour, mais de basicaly utilisent le pilote de Jet (doit être disponible sur n'importe quelle installation Windows) pour ouvrir un fichier Excel comme vous vous référez à une base de données. P>

string query = "INSERT INTO [raw_aaa$] (correlationid, ipaddr, somenum) VALUES (\"abcdef", \"1.1.1.1", 10)";
command.CommandText = query;
command.ExecuteNonQuery();


0 commentaires

8
votes

Je pense que vous êtes sur des choses compliquées. Excel scindre automatiquement les données dans les colonnes par des délimiteurs de virgule s'il s'agit d'un fichier CSV. Donc, tout ce que vous devriez avoir à faire est de vous assurer que votre extension est CSV.

J'ai juste essayé d'ouvrir un fichier rapide dans Excel et ça marche bien. Donc, ce dont vous avez vraiment besoin est juste d'appeler workbook.open () avec un fichier avec une extension CSV.


1 commentaires

Oui, c'est vrai - mais il y a des différences subtiles avec les paramètres régionaux. Par exemple, l'anglais (Royaume-Uni ou États-Unis) préfère la virgule comme délimiteur (séparateur de liste) et utilise un point décimal pour les chiffres, tandis que les paramètres allemands (Allemagne) utilisent Semicolon comme délimiteur et virginal pour des nombres décimaux. En conséquence, si Excel ne comprend pas le délimiteur, il charge tout dans la colonne A. Le seul moyen de spécifier un délimiteur est soit via Windows, soit si vous ouvrez un classeur vide et sélectionnez Données -> à partir du texte / CSV. Cela ne fonctionne pas toujours de la bonne manière à travers l'affectation d'extension de fichier.



7
votes

Vous pouvez ouvrir Excel, commencez à enregistrer une macro, faites ce que vous voulez, puis voyez ce que la macro enregistrée. Cela devrait vous dire quels objets utiliser et comment les utiliser.


2 commentaires

Donc, ce que vous vouliez vraiment faire était d'afficher la boîte de dialogue pour configurer une importation de CSV?


Cela m'a aidé beaucoup aussi. Merci!



1
votes

3
votes

Vous pouvez jeter un coup d'œil à TakeIO.SPRADSHEETHEETHEETHEETHEETHEET . Il accepte des fichiers à partir d'Excel 97-2003, Excel 2007 et le format récesseur, et CSV (séparateurs de points de csv ou de virgule).

Exemple: P>

sheet.Serialize(outfile, ',');


0 commentaires