Frage von Goodquestions88, 30

Wie erstelle ich aus einer Excel-Tabelle eine .TXT Datei mit Anführungszeichen und Komma?

Hallo,

wer kann mir sagen wie ich in Excel meine Tabelle in eine .TXT Datei exportiere mit Anführungszeichen und Komma?

A1: Maus A2: Hund A3: Katze

Txt-Datei

"Maus","Hund","Katze"

Besten Dank

Antwort
von PWolff, 20

Hab auch keine Möglichkeit gefunden, beim Export das genaue Dateiformat anzugeben. Selbst beim Import funktioniert es nur, wenn man die Datei über Datei -> Öffnen öffnet, und nicht, wenn man sie per Doppelklick oder "Öffnen mit..." öffnet.

Also musst du wohl ein Makro zum Exportieren verwenden.

Kommentar von Goodquestions88 ,
Kommentar von PWolff ,

Also auch mit Makro.

Aber für meinen Geschmack ziemlich anfängerhaft gemacht.

Gegenvorschlag (hier nur für eine Spalte, Erweiterung sollte aber kein Problem sein):

Option Explicit

Private Sub CommandButton1_Click()
'Exportieren

Dim p As Long, Dateiname As String
Dim Erfolg As Boolean

p = InStrRev(Me.Parent.Name, "."): If p = 0 Then p = Len(Me.Parent.Name) + 1 'der 2. Teil der Zeile sollte überflüssig sein, weil wir normalerweise immer eine Dateiendung haben, aber es schadet nichts, sich anzugewöhnen, den Fall eines fehlenden Trennzeichens grundsätzlich mit zu behandeln
Dateiname = Me.Parent.Path + "\" + Left$(Me.Parent.Name, p - 1) + ".txt" 'Dateipfad + Name ohne Endung + Endung für Textdatei

Erfolg = ExportTransposedCommaQuote(Dateiname)
If Not Erfolg Then MsgBox "Konnte " + Dateiname + " nicht zum Schreiben öffnen."
End Sub

'

Public Function ExportTransposedCommaQuote(FileName As String) As Boolean
'returns True in case of success; false otherwise

Dim fNo As Integer, rowNo As Long, t As String

fNo = FreeFile()
On Error Resume Next
Open FileName For Output As #fNo
Close #fNo
If Err.Number <> 0 Then
ExportCommaQuote = False
Exit Function
End If
On Error GoTo 0

Open FileName For Output As #fNo
For rowNo = 1 To Me.Cells.SpecialCells(xlCellTypeLastCell).Row 'Möglicherweise muss man hier noch nachsehen, ob die Zellen nachträglich geleert worden sind - die letzte Zelle kann bei Excel nur nach rechts und nach unten wandern, nie nach links oder oben
If rowNo > 1 Then Print #fNo, ",";
t = Me.Cells(rowNo, 1).Value
t = Replace(t, """", """""") 'Damit die Anführungszeichen beim Import durch z. B. Excel als solche erkannt werden, wird ["] durch [""] ersetzt
Print #fNo, """" + t + """"; '["] vor und hinter den Text setzen
Next rowNo '= 1 To Me.Cells.SpecialCells(xlCellTypeLastCell).Row
Close #fNo

ExportCommaQuote = True
End Function
Kommentar von PWolff ,

Oder du verwendest LibreOffice.

Da kannst du bei "Datei -> Kopie speichern..." den Dateityp "Text CSV" auswählen, den Haken bei "Filtereinstellungen bearbeiten" setzen und die gewünschten Einstellungen von Hand vornehmen.

Hier:

Feldtrenner: Komma
Texttrenner: doppeltes Anführungszeichen
Haken RAUS bei "Zellinhalt wie angezeigt speichern"
Haken REIN bei "Text zwischen Hochkommas ausgeben"

Hier hast du immer noch das Problem, dass beim Exportieren die Anordnung in Zeilen und Spalten beibehalten wird.

Also musst du die Spalte "transponieren".

Entweder nimmst du von Anfang an die Zellen A1, B1, C1, ...

Oder du fügst ein neues Tabellenblatt ein, markierst die Zeile 1 und gibst als "Matrixformel" ein:

=MTRANS(Tabelle1!A1:A65536)

(Falls die Tabelle mit den Daten "Tabelle1" heißt)

(Besser, du ersetzt die 65536 durch die tatsächliche Zahl der Einträge, sonst kriegst du in der Ausgabedatei jede Menge Kommas ohne was dazwischen. Und markiere in Zeile 1 nur so viele Spalten, wie du Einträge hast, sonst kriegst du "#NV"-Einträge.)

Expertenantwort
von Iamiam, Community-Experte für Excel, 10

ohne Makro:

bereits in xl verketten, erst mal zB in C1:=""""&A1&""""&","   *)

in C2: =A1&""""&A2&""""&","

das dann runterziehen, den String am Ende kopieren und als WERTE wieder an derselben Stelle einfügen.

Aus der Bearbeitungszeile kopieren, in die Textdatei einfügen. Ggf letztes Komma löschen.

*) Ob man drei oder vier """" braucht, musste ich auch erst wieder ausprobieren: man braucht vier - nach welcher Logik auch immer.

Kommentar von MrProcess ,

1. und 2. als Textbegrenzer. 3 und 4. wegen notwendiger Verdoppelung des Anführungszeichen im konstanten Text.

Lesbarer wird das wenn man statt Konstanten die Funktion zeichen(34) nimmst. Oder Namen dafür definieren mit der Funktion oder Konstante.

Kommentar von Iamiam ,

@ MrProcess: danke für die Erklärung!. Ich nehme an, 1 und 4 als Textbegrenzer, 2 und 3  wg...

Hab ich nie verstanden gehabt, vllt bleibts mit dieser Erklärung jetzt hängen!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten