Excel, csv, Semikolon-Anführungszeichen-Problem

Hallo,

ich erzeuge mit einem PHP-Programm (PHP 4.3.3) eine CSV-Datei, um die Daten für Excel zur Verfügung zu stellen. Nun habe ich das (offenbar typische) Problem mit den Semikolons und den Anführungszeichen, die Excel immer mal falsch interpretiert.

Eine Zeile wie

Test;Lustig;funktioniert gut;kein Problem

wird von Excel korrekt in vier Zellen verteilt.

Auch eine Zeile wie

Hallo;gut;"hier ein Semilkolon: ;";klasse

wird genommen, wenn ich das komplette Feld, das ein Semikolon enthält, in Anführungszeichen setze.

Habe ich aber ein Feld, in dem Anführungszeichen und Semikolons gleichzeitig auftreten, also z.B. so eines:

Hier ein "Semikolon": ;

dann funktioniert so etwas nicht mehr:

Hallo;blöd;"Hier ein "Semilkolon": ;";das geht nicht

Excel macht dann daraus die vier Feldinhalte:

 Hallo
 blöd
 Hier ein Semikolon":
 ;das geht nicht

Ich habe gegoogelt, aber nichts gefunden, ob Anführungszeichen und Semikolons irgendwie gemeinsam für Excel maskiert werden können.

Geht so eine Maskierung? Oder muss man alle Anführungszeichen durch andere Zeichen ersetzen?
Vielen Dank für Tipps
A.

Hallo Anja,

die Tücke liegt im Detail. Du bist auf dem richtigen Weg.

aus:

Spalte1;Spalte2;
dies ist eine Spalte ohne Semikolon;"dies ist eine Spalte mit ; Semikolon"; 

wird in Excel:

Spalte1 Spalte2
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ; Semikolon

Gruß
Marion

Hallo Marion,

so weit war ich leider schon.

Was ich brauche ist eine Mischung aus Anzführungszeichen und Semikolons, also so etwas:

Spalte1 Spalte2
Einfache Spalte Spalte mit "Anführungszeichen" und ; Semikolon

Aber diese CSV-Datei:

Spalte1;Spalte2;
Einfache Spalte;"Spalte mit "Anführungszeichen" und ; Semikolon";

funktioniert in Excel nicht.

Gruß,
Anja

aus:

Spalte1;Spalte2;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit
; Semikolon“;

wird in Excel:

Spalte1 Spalte2
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ;
Semikolon

Hi Anja,
ok- wie wär’s mit folgender Möglichkeit:

aus

Spalte1;Spalte2;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit ; Semikolon“;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit ;“;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit ‚;‘ Semikolon“;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit ‚;‘“;

wird in Excel:

Spalte1 Spalte2
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ; Semikolon
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ;
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ';' Semikolon
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ';'

die Anführungszeichen wurden durch Hochkomma ersetzt.

Gruß
Marion

Hi Anja,

oder mit doppelten Anführungszeichen.

Aus:

dies ist eine Spalte ohne Semikolon;"dies ist eine Spalte mit "";""";

wird in Excel:

dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ";"

Gruß
Marion

Ja, Marion,
daran habe ich auch schon gedacht. Allerdings gibt es dabei zwei Probleme. Zum einen funktioniert diese Lösung auch noch nicht zuverlässig, weil Excel Hochkommas auch nicht immer gleich interpretiert, z.B. zu Beginn von Zellinhalten.

Z.B. verschluckt Excel bei

Spalte1;Spalte2;
ohne Besonderheiten;"'mit Hochkommas' und ; Semikolon";

das erste Hochkomma in der Zellanzeige, weil es dieses als „Formatierung zu Text“ interpretiert.

Dazu kommt, dass die Anführungszeichen möglichst erhalten bleiben sollen, weil die AnwenderInnen die ja auch so eingegeben hatten. Z.B. sieht auch der Text

 "geht's?"

schlecht aus, wenn er als

 'geht's?'

dargestellt wird.

Ich habe mich früher schon mit der mangelhaften CSV-Behandlung von Excel herumgeplagt. Mir scheint, eine einfache Lösung gibt’s da echt nicht.

In meiner Lösung hab ich nun alle doppelten Anführungszeichen durch ## ersetzt. Nach Übernahme in Excel muss dann einmal ein Suchen/Ersetzen durchgeführt werden.

Vielen Dank auf jeden Fall für Deine Unterstützung, Marion.
Wenn Dir noch etwas einfällt, freue ich mich über Deine Anregung.
Viele Grüße
Anja

Hi Anja,
ok- wie wär’s mit folgender Möglichkeit:

aus

Spalte1;Spalte2;
dies ist eine Spalte ohne Semikolon;„dies ist eine Spalte mit ‚;‘“;

wird in Excel:

Spalte1 Spalte2
dies ist eine Spalte ohne Semikolon dies ist eine Spalte mit ‚;‘

die Anführungszeichen wurden durch Hochkomma ersetzt.

Ja, auch nicht schlecht,

aber auch hier macht Excel Probleme, wenn die doppelten Anführungszeichen am Anfang des Zellinhalts stehen.

Leider habe ich das alles schon durch. Ich hatte gehofft, Excel könnte mittlerweile irgendwie eine andere Maskierung der Anführungszeichen und Semikolons zulassen.

Ich hab es nun erst mal mit einer Zwischenlösung realisiert (s. voriges Posting von mir).

Danke für Deine Unterstützung!
Gruß
Anja

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wie wäre es damit die Semikolons, die nicht als Trennzeichen dienen sollen, also im Text sind, vor Import durch ein anderes ungenutztes Zeichen (Sonderzeichen z.B. µ oder so) zu ersetzen und es hinterher nach Import zurückzuverwandeln?

Wie wäre es damit die Semikolons, die nicht als Trennzeichen
dienen sollen, also im Text sind, vor Import durch ein anderes
ungenutztes Zeichen (Sonderzeichen z.B. µ oder so) zu
ersetzen und es hinterher nach Import zurückzuverwandeln?

Hallo Peter,
wie unten schon geschrieben…

In meiner Lösung hab ich nun alle doppelten Anführungszeichen
durch ## ersetzt. Nach Übernahme in Excel muss dann einmal ein
Suchen/Ersetzen durchgeführt werden.

…habe ich auf eine ähnliche Lösung zurückgegriffen.

Gruß
Anja

wie unten schon geschrieben…
…habe ich auf eine ähnliche Lösung zurückgegriffen.

Hi Anja,
ist dadurch das Problem jetzt für dich gelöst?
Gruß
Reinhard

@ Reinhard Excel, csv, Semikolon-Anführungszeichen
Hi Reinhard,
wenn ich das richtig verstanden habe, ist Anja immer noch an einer Lösung interessiert. (Ich auch - rein interessehalber - da muss es doch was geben) Anja hat zur Zeit eine Zwischenlösung (siehe Posting im anderen Zweig).

Mir fällt nur auch nichts ein. Ich hab auch schon mit völlig anderen Trennzeichen experimentiert, aber Excel trennt trotzdem bei einem Semikolon, wenn es im Text enthalten ist.

Da läuft grad jetzt wieder so’n Titel auf meinem Rechner „Einfach abhaun, …“ und ich muß grad auf den Text hören und kann deshalb auch gar nicht denken. Vielleicht fällt mir ja später noch was ein.
Gruß
Marion

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Marion,
bin zwar kurz vorm Flughafen, aber eins noch :smile:

ist dadurch das Problem jetzt für dich gelöst?

wenn ich das richtig verstanden habe, ist Anja immer noch an
einer Lösung interessiert. (Ich auch - rein interessehalber -
da muss es doch was geben) Anja hat zur Zeit eine
Zwischenlösung (siehe Posting im anderen Zweig).

Mir fällt nur auch nichts ein. Ich hab auch schon mit völlig
anderen Trennzeichen experimentiert, aber Excel trennt
trotzdem bei einem Semikolon, wenn es im Text enthalten ist.

ich habe da keine Excelösung, und gebe zu *schäm* das Problem gar nicht richtig gelesen zu haben, für mich ein übliches Exceleinleseproblem, was ich anbieten kann ist eine Vba-Lösung die die Datei einliest, und da bestimmt man selbst was da Trennzeichen sind und ist nicht von Excel abhängig.

Da läuft grad jetzt wieder so’n Titel auf meinem Rechner
„Einfach abhaun, …“ und ich muß grad auf den Text hören und
kann deshalb auch gar nicht denken. Vielleicht fällt mir ja
später noch was ein.

Stellt sich die Frage, WO dir das einfällt :smile: Schick mir 'ne karte…

Gruß
Marion

Excel, csv, Semikolon-Anführungszei
Hallo Anja,

kannst du die Datei in *.txt Dateiformat abspeichern?
In dem Fall wäre die Lösung ein makro, über das du deine Datei öffnest. Dann wäre jedes beliebige Trennzeichen *glaub* - ich habe bereits einige erfolgreich probiert - möglich.

Interessant wäre dann noch, ob die Datei immer den gleichen Namen hat und der Pfad fest vorgegeben ist, oder du die Datei über einen Explorer auswählen willst.

jedenfalls sind Dateien in csv-Format mit anderen Trennzeichen *für mich* über vba nicht lösbar (nicht wunschgemäß zu öffnen).

@Reinhard

Stellt sich die Frage, WO dir das einfällt :smile: Schick mir 'ne
karte…

mal schaun, ob ich noch Kleingeld fürs Porto habe, das WO ist dann auf der Vorderseite :wink:

Gruß
Marion

Hallo Anja,

kannst du die Datei in *.txt Dateiformat abspeichern?
In dem Fall wäre die Lösung ein makro, über das du deine Datei
öffnest. Dann wäre jedes beliebige Trennzeichen *glaub* - ich
habe bereits einige erfolgreich probiert - möglich.

hier ist schon mal eine prozedure zum Öffnen von txt.Dateien. Als Trennzeichen habe ich „#“ geewählt. Du kannst das Zeichen im code auch durch ein anderes austauschen. Füge dazu das andere Zeichen zwischen die AnführungsZeichen bei dem Ausdruck otherchar:="#" ein.

in einer Excelmappe mit ALT+F11 in den vba-Explorer (VBIDE) wechseln und den code in ein Modul reinkopieren.

Option Explicit

Sub txtDateiOeffnen()
Dim varDatName As Variant
 varDatName = Application.GetOpenFilename
 If varDatName = False Then Exit Sub
 Workbooks.OpenText varDatName, DataType:=xlDelimited, other:=True, otherchar:="#"
End Sub

Das Makro am besten einem Button zuweisen.

Falls du nicht weißt, wie man den code in ein Modul einfügt und einem Button zuweist, meld dich noch mal.

Falls du keine Möglichkeit hast, das Dateiformat txt zu nutzen, und die Dateien nur in csv vorliegen, kann man die csv-Dateien erst als txt-Dateien speichern und sie dann öffnen. Das kann man in die prozedure mit einbauen. Auch in dem Fall meld dich noch mal.

Gruß
Marion