Tipps & Tricks 03.01.2012, 07:05 Uhr

Excel 2010: CSV-Export mit Anführungszeichen

Problem: Ich exportiere aus Excel 2010 eine Liste ins CSV-Format. Das Zielsystem, auf dem die Liste wieder importiert werden muss, kommt mit dem von Excel erstellten CSV-Format nicht zurecht. Es fehlen die Anführungs- und Schlusszeichen als Feldbegrenzungen (z.B. "Feld"). Gibt es einen Weg, die Daten auf diese Weise aus Excel in eine CSV-Datei zu kriegen?
Lösung: Mit dem gewöhnlichen Export-Assistenten bzw. «Speichern unter» in Excel geht das nicht. Sie bekommen es aber mit einem Makro hin.
So könnte Ihre Beispiel-Liste in Excel aussehen:
Was Excel beim CSV-Export normalerweise damit anstellt, ist dies - ohne die Anführungs- und Schlusszeichen, wie Sie richtig feststellen :
Liste nach dem normalen CSV-Export
Bevor Sie loslegen, noch ein Tipp: Durchsuchen Sie Ihre Tabelle zuerst nach dem Anführungszeichen ("). Dieses wird später in der CSV-Datei als Feldtrenner eingesetzt. Wenn innerhalb einer Zelle schon jetzt ein solches Zeichen vorkäme (z.B. bei Zoll-Angaben wie «2,5"»), könnte das später beim Import zu Verwirrungen führen. Ersetzen Sie das Zeichen allenfalls durch Text oder eine Zeichenfolge, die Sie nach erfolgtem Export wieder zurück-ersetzen.
Das Makro: Drücken Sie Alt+F11 zum Öffnen des Visual-Basic-Editors oder gehen Sie im Reiter Entwicklertools zu Visual Basic. Falls die Entwicklertools nicht zu sehen sind, blenden Sie sie ein: In Excel 2010 gehts zu Datei/Optionen/Menüband anpassen, dann haken Sie rechts die «Entwicklertools» an. In Excel 2007: Office-Button oben links, Excel-Optionen, dann bei Häufig verwendet diese Option ankreuzen: «Entwicklerregisterkarte in der Multifunktionsleiste anzeigen».
Doppelklicken Sie im Visual-Basic-Editor auf Diese Arbeitsmappe und fügen Sie exakt folgenden Makrocode ein, den Sie auch von hier kopieren können:
Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub
Sicherheitshalber hier noch einmal den Makrocode als Screenshot, falls unser Websystem im oben kopierbaren Makrocode Fehler einbaut:
Der Makrocode im Screenshot
Gehen Sie zu Datei/Schliessen und zurück zu Excel. Drücken Sie Alt+F8 oder gehen Sie via Entwicklertools zu Makros. Jetzt noch auf das «CSVFile»-Makro und auf Ausführen klicken. Excel zeigt einen «Speichern unter»-Dialog an, in dem Sie einen Dateinamen (z.B. «MeineListe.csv») eingeben und einen Speicherort wählen. Die so erstellte CSV-Datei enthält als Feldbegrenzer jetzt die Anführungszeichen.
Die CSV-Liste mit Anführungs- und Schlusszeichen
Wichtig: Wenn Sie Ihre ursprüngliche Excel-Datei schliessen, müssen Sie sich entscheiden, ob Sie das Makro in dieser Excel-Datei behalten wollen oder nicht. Falls es in der Datei bleiben soll, müssen Sie sie unter dem Dateityp .xlsm statt .xlsx speichern. (PCtipp-Forum)



Kommentare
Avatar
Xpert
13.03.2013
Hey, danke für den Code! Der passt soweit. Wenn du jetzt noch sagen kannst, wie ich anstatt dem ";" Trennzeichen einen Tabstop setzen kann, bist du Gott ;-) Danke! Also ein CSV mit Tabstop gibt es nicht, sonst wäre es kein CSV. Du kannst die Datei aber als txt (mit Tapstpps) via Speichern unter abspeichern.

Avatar
slup
13.03.2013
Also ein CSV mit Tabstop gibt es nicht, sonst wäre es kein CSV... Wieso nicht? siehe hier: Allgemein wird dafür das Komma eingesetzt. Abhängig von beteiligter Software und Benutzereinstellungen sind auch Semikolon, Doppelpunkt, Tabulator, Leerzeichen oder andere Zeichen üblich.

Avatar
Gaby Salvisberg
13.03.2013
Hallo Server2503 - und willkommen im PCtipp-Forum! Wenn du jetzt noch sagen kannst, wie ich anstatt dem ";" Trennzeichen einen Tabstop setzen kann, bist du Gott ;-) Wären wir Götter oder Göttinnen, würde es uns möglicherweise nicht geben. ;) Zusätzlich zu den Infos von Xpert und slup: Du könntest die CSV-Datei nachträglich im Notepad-Editor bearbeiten. Das geht mit Suchen/Ersetzen ganz fix. Notepad starten, darin die CSV-Datei öffnen. Nun muss ein Tabzeichen in die Zwischenablage. Hierzu am besten den Cursor ganz an den Anfang der Datei stellen, einmal die Tab-Taste drücken, den dadurch entstandenen Abstand markieren und mit Ctrl+X wieder ausschneiden. Nun gehts zu Bearbeiten/Ersetzen. Bei «Suchen nach» das Semikolon ; eintippen, bei «Ersetzen durch» den Cursor reinsetzen und den vorhin ausgeschnittenen Tabsprung per Ctrl+V einfügen. Einmal kurz auf Alle ersetzen, schon sind alle Strichpunkte durch Tabsprünge ersetzt. Ist halt ein Arbeitsschritt mehr, funktionierte hier beim Testen aber gut. Herzliche Grüsse Gaby

Avatar
Xpert
13.03.2013
Wieso nicht? siehe hier: Allgemein wird dafür das Komma eingesetzt. Abhängig von beteiligter Software und Benutzereinstellungen sind auch Semikolon, Doppelpunkt, Tabulator, Leerzeichen oder andere Zeichen üblich. Möglich das es so eingesetzt wird. Entspricht aber wohl nicht dem original RFC 4180

Avatar
wmandi
02.07.2014
Datumsformat Genial, das Makro. Danke! Allerdings habe ich folgendes Problem: In der Excel-Tabelle habe ich Daten im amerikanischen Format: YYYY-MM-DD Beim Exporiteren mit diesem Makro werden alle Daten in das Deutsche Format: DD.MM.YYYY konvertiert. Das möchte ich aber nicht. Ich will die Daten auch im csv im amerikanischen Format haben!

Avatar
protonmg
20.08.2015
Lob Habe mich jetzt extra registriert um Danke zu sagen für diese wunderbar klare und funktionierende Anleitung: Dankesehr! Mir erleichtert diese Erklärung gerade das Leben.