C# - Excel-import von Daten aus CSV in Excel
Wie Importiere ich Excel-Daten aus einer CSV-Datei mit C#? Eigentlich ist das, was ich will, zu erreichen, ist ähnlich dem, was wir tun, in Excel, gehen Sie auf die Daten - Registerkarte, und wählen Sie dann Von Text option und verwenden Sie dann die Text in Spalten option und wählen Sie die CSV-und es ist die Magie, und all das Zeug. Ich möchte es automatisieren.
Wenn Sie könnte den Kopf mich in die richtige Richtung, ich werde wirklich zu schätzen, dass.
EDIT: ich denke, ich habe nicht gut erklärt. Was ich tun möchte, ist so etwas wie
Excel.Application excelApp;
Excel.Workbook excelWorkbook;
//open excel
excelApp = new Excel.Application();
//something like
excelWorkbook.ImportFromTextFile(); //is what I need
Möchte ich diese Daten importieren in Excel, nicht meine eigene Anwendung. Soweit ich weiß, nicht ich glaube, ich würde das Parsen der CSV mich und dann legen Sie Sie in Excel. Excel macht das für uns. Ich muss einfach wissen, wie automatisieren Sie diesen Prozess.
Ich will einfach nur, um es zu öffnen in Excel 🙂 und wenden Sie die "Text to Column" - option in Excel
InformationsquelleAutor akif | 2009-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte Sie öffnen Sie Excel, starten Sie ein makro aufzeichnen, tun, was Sie wollen, dann sehen Sie, was das makro aufgezeichnet. Das sollte Ihnen sagen, welche Objekte Sie verwenden und wie Sie Sie verwenden.
Also, was Sie wirklich tun wollte, war die Anzeige der dialog für die Konfiguration der CSV-import?
dies hat mir geholfen, eine Menge zu. Danke!
InformationsquelleAutor Lance Fisher
Ich denke, du bist über die Dinge komplizieren. Excel teilt automatisch Daten in Spalten mit Komma-Trennzeichen, wenn es eine CSV-Datei. Also alle sollten Sie tun müssen, ist sicherzustellen, dass Ihre Erweiterung CSV.
Habe ich gerade versucht, öffnen Sie eine Datei schnell in Excel und es funktioniert gut. Also, was Sie wirklich brauchen, ist nur zu nennen-Arbeitsmappe.Open() eine Datei mit der Erweiterung CSV.
InformationsquelleAutor Ian
Ich glaube, es gibt zwei Teile, der eine ist die split-operation für die csv, dass die anderen responder hat bereits aufgegriffen, was ich nicht glaube ist wichtig, aber werde ich sowieso. Und die große ist das schreiben in die excel-Datei, die ich in der Lage war, zu arbeiten, aber unter bestimmten Umständen, und es war ein Schmerz zu erreichen.
CSV ist ziemlich einfach, können Sie einen string.aufgeteilt auf ein Komma, Trennzeichen, wenn Sie wollen. Diese Methode ist jedoch schrecklich gebrochen, obgleich ich gebe zu, ich habe es selbst schon angewandt, vor allem, weil ich auch die Kontrolle über die Quelle der Daten, und wissen, dass keine Anführungszeichen oder escape-Zeichen wird immer angezeigt. Ich habe einen link zu einem Artikel auf der richtigen csv-parsing, allerdings habe ich nie getestet, die Quelle oder vollständig geprüft der code selbst. Ich habe verwendet andere code, durch den gleichen Autor mit Erfolg. http://www.boyet.com/articles/csvparser.html
Der zweite Teil ist viel komplexer, und war ein großer Schmerz für mich. Der Ansatz, den ich nahm, war der Einsatz der jet-Treiber zur Behandlung der excel-Datei wie eine Datenbank, und führen Sie dann die SQL-Abfragen. Es gibt ein paar Einschränkungen, die möglicherweise dazu führen, dass dies nicht passen, Sie sind Ziel. Ich war auf der Suche nach nutzen Sie vorgefertigte excel-Datei Vorlagen, die im Grunde die Anzeige von Daten und einige preset-Funktionen und Diagramme. Um dies zu erreichen habe ich mehrere Registerkarten des Bericht-Daten und eine Registerkarte, die raw_data. Mein Programm schreibt die raw_data Registerkarte und aller anderen Registerkarten Berechnungen zeigen Sie auf die Zellen in dieser Tabelle. Ich gehe in einige der Gründe für dieses Verhalten nach dem code:
First off, die Importe (nicht alle werden benötigt, dieser ist gezogen aus einer größeren Klasse-Datei, und ich nicht richtig kommentieren, was war, für was):
Als Nächstes müssen wir definieren Sie den connection-string in meiner Klasse hat schon ein FileInfo-Verweis an dieser Stelle auf die Datei, die ich verwenden möchten, so ist das, was ich weitergeben. Es ist möglich, die Suche auf google, was all die Parameter sind, aber im Grunde genommen verwenden Sie die Jet-Treiber (sollte auf JEDEM windows-Installation) öffnen einer excel-Datei wie Sie unter Bezugnahme auf eine Datenbank.
Nun öffnen wir die Verbindung zur DB, und bereit sein, um Befehle an die DB:
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Daten.OleDb");
Als Nächstes müssen wir die eigentliche Logik für die DB einfügen. Also im Grunde werfen Abfragen in einer Schleife oder was auch immer du bist-Logik ist, und legen Sie die Daten Zeile für Zeile.
Nun, hier ist der wirklich lästige Teil, der excel-Treiber versucht zu erkennen, du bist der Spalte Typ, bevor Sie einfügen, so dass selbst wenn Sie passieren einen korrekten integer-Wert, wenn excel denkt, dass die Spalte vom Typ text ist, wird es fügen Sie alle Ihre zahlen, die als text, und es ist sehr schwer zu bekommen, diese wie eine Zahl behandelt. Als solche, muss excel bereits über die Spalte Typ als die Anzahl. Um dies zu erreichen, für meine template-Datei, die ich füllen Sie die ersten 10 Zeilen mit dummy-Daten, so dass, wenn Sie laden Sie die Datei in der jet-Treiber, kann es erkennen, die richtigen Arten und Verwendung. Dann alle meine forumals, der Punkt, an meine csv-Tabelle richtig funktionieren, da die Werte des richtigen Typs. Dies kann für Sie arbeiten, wenn Sie Ziele sind ähnlich der meinen, und die Verwendung von Vorlagen, die bereits auf diese Daten (nur start in Zeile 10 statt der Zeile 2).
Weil meine raw_aaa Registerkarte in excel könnte wie folgt Aussehen:
correlationid ipaddr somenum
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
abcdef 1.1.1.1 5
Hinweis Zeile 1 die Spaltennamen, die ich auf die in meinem sql-Abfragen. Ich denke, man kann ohne, aber das erfordert ein wenig mehr Forschung. Bereits mit diesen Daten in der excel-Datei, die somenum Spalte wird erkannt werden als eine Zahl, und alle eingefügten Daten werden ordnungsgemäß als solche behandelt.
Antoher beachten Sie, dass macht diese nervige, der Jet-Treiber ist nur 32 bit, also in meinem Fall, wo ich hatte eine explizite 64-bit-Programm, ich war nicht in der Lage zu führen Sie diese direkt. So hatte ich die fiesen hack in eine Datei schreiben, dann ein Programm starten, würde das einfügen der Daten in der Datei in meine excel-Vorlage.
Alles in allem, ich denke, die Lösung ist ziemlich böse, aber bisher nicht gefunden haben, einen besseren Weg, dies zu tun, leider. Viel Glück!
InformationsquelleAutor Kevin Nisbet
Können Sie einen Blick auf TakeIo.- Tabelle .NET-Bibliothek. Akzeptiert werden Dateien von Excel 97-2003, Excel 2007 und neuere, und CSV-format (Semikolon oder Komma-Trennzeichen).
Beispiel:
Können Sie Sie entfernen, Anfang und leere Zeilen, und auch Anfang und nachfolgende Spalten der importierten Daten anhand der
Normalize()
Funktion:Manchmal können Sie feststellen, dass Ihre importierten Daten enthält leere Zeilen zwischen den Daten, so dass Sie können verwenden Sie einen anderen Helfer für diesen Fall:
Es ist ein
Serialize()
- Funktion zum umwandeln jeder Eingabe in das CSV zu:Wenn Sie wie zu verwenden Komma anstelle des Standard-Semikolon-Trennzeichen in der CSV-Datei tun:
Und ja, es gibt auch eine
ToString()
Funktion zu...Diese Paket ist erhältlich auf NuGet zu, nehmen Sie nur einen Blick auf TakeIo.Arbeitsblatt.
InformationsquelleAutor balena
Können Sie verwenden ADO.NET
http://vbadud.blogspot.com/2008/09/opening-comma-separate-file-csv-through.html
InformationsquelleAutor Captain Comic
Gut, das importieren von CSV sollte nicht eine große Sache sein. Ich denke die einfachste Methode wäre, es zu tun mit string-Operationen. Sie bauen konnte ziemlich gut parser mit einfachen Split () - Befehl, und die Sachen immer in arrays.
Was empfehlen Sie, Vinko?
Bear in Verstand mit diesem Ansatz, die Kommas entkommen werden kann. Sie haben, um die Rechnung zu
Guter Punkt, Richard
Ich empfehle Lumenworks.IO.CsvReader (google es)
InformationsquelleAutor Cyril Gupta