2011-08-03 08:39:00 +0000 2011-08-03 08:39:00 +0000
64
64

Formatieren einer kommagetrennten CSV-Datei, um Excel zu zwingen, den Wert als Zeichenfolge zu interpretieren

Ich habe eine Weile herumgesucht und versucht, herauszufinden, wie man eine CSV-Datei so ausgibt, dass Excel gezwungen wird, die Werte als Zeichenkette zu interpretieren und nicht versucht, sie in Zahlen oder Datumsangaben umzuwandeln.

z.B.:

"141", "10/11/2002", "350.00", "1311742251"

Excel versucht, alle diese Werte “intelligent” in seine nativen Datums-/Zahlenformate zu konvertieren. Gibt es eine Möglichkeit, das zu umgehen?


_EDIT: Habe die Absicht meiner Frage geklärt, sorry für die Verwirrung.

Antworten (5)

70
70
70
2011-08-03 08:39:57 +0000

Für diejenigen, die die Kontrolle über die Quelldaten haben: Anscheinend erkennt Excel das Format eines CSV-Feldes automatisch, wenn die CSV-Spalte nicht in diesem Format vorliegt:

"=""Data Here"""

z. B.

20, 5.5%, "0404 123 351", "3-6", "=""123"""
[number] [percent] [number] [date] [string] <-- how Excel interprets

Es funktioniert auch in Google Spreadsheet, aber ich bin nicht sicher, ob andere Tabellenkalkulationsprogramme diese Notation unterstützen.

Wenn Sie vermuten, dass die Daten selbst Anführungszeichen enthalten, müssen Sie diese doppel-escape, wie folgt…

"=""She said """"Hello"""" to him"""

(EDIT: Mit Korrekturen aktualisiert, danke DMA57361!)

39
39
39
2014-01-20 13:02:48 +0000

Wie viele andere auch, habe ich mit den gleichen Entscheidungen wie Microsoft zu kämpfen und habe verschiedene Lösungsvorschläge ausprobiert.

Für Excel 2007 geht das Folgende:

  • Alle Werte in doppelte Anführungszeichen zu setzen, hilft NICHT
  • Ein = vor alle Werte zu setzen, nachdem sie in doppelte Anführungszeichen gesetzt wurden, hilft, ABER macht die csv-Datei für die meisten anderen Anwendungen unbrauchbar
  • Klammern um die doppelten Anführungszeichen um alle Werte zu setzen, ist Unsinn
  • Ein Leerzeichen vor alle Werte zu setzen, bevor sie in doppelte Anführungszeichen gesetzt werden, verhindert die Konvertierung in Datumsangaben, aber NICHT das Abschneiden von führenden oder nachfolgenden Nullen.
  • Ein einfaches Anführungszeichen vor einen Wert zu setzen, funktioniert nur bei der Eingabe von Daten in Excel.

Allerdings:

Das Setzen eines Tabulators vor alle Werte, bevor sie in Anführungszeichen gesetzt werden, verhindert die Konvertierung in Datumsangaben UND verhindert das Abschneiden führender oder nachgestellter Nullen und das Blatt zeigt nicht einmal unangenehme Warnmarkierungen in der oberen linken Ecke jeder Zelle.

Z.B.:

"<tab character><some value>","<tab character><some other value>"

Beachten Sie, dass das Tabulatorzeichen innerhalb der doppelten Anführungszeichen stehen muss. Edit: es stellt sich heraus, dass die Anführungszeichen gar nicht notwendig sind.

Ein Doppelklick auf die csv-Datei kann die Datei als Tabellenkalkulation in Excel öffnen und alle Werte anzeigen, die wie oben beschrieben behandelt werden, wie Textdaten. Achten Sie darauf, Excel so einzustellen, dass das ‘.’ als Dezimalpunkt verwendet wird und nicht das ‘,’, sonst wird jede Zeile der csv-Datei als ein Text in der ersten Zelle jeder Zeile enden. Anscheinend denkt Microsoft, dass CSV “Nicht der Dezimalpunkt” Separated Value bedeutet.

22
22
22
2011-08-03 09:13:56 +0000

Die Verwendung der Excel-Importfunktion ermöglicht es Ihnen, das Format (Auto, Text oder Datum) anzugeben, als das jede Spalte interpretiert werden soll, und erfordert keine Änderungen an den Datendateien.

Sie finden es als DataGet External DataFrom Text in Excel 2007/2010.
Oder DataImport External DataImport Data in Excel 2003.

Hier ist ein Bild des Textimport-Assistenten von Excel 2003 in Aktion mit den angegebenen Beispieldaten, das zeigt, wie ich die beiden letzten Spalten als Text importiere:

2
2
2
2013-01-13 22:37:27 +0000

Das Beispiel von Simon hat bei mir nicht funktioniert, und ich vermute, es ist ein Sprachunterschied. In C# sieht mein Arbeitsformat-String so aus:

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

und so sieht die Ausgabedatei aus:

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

Wie Sie sehen können, ist das Format in der Ausgabedatei ="VALUE", und nicht "=""VALUE""",, was meiner Meinung nach eine Visual Basic-Konvention sein könnte.

Ich verwende Excel 2010. Übrigens: Google Sheets kann eine so formatierte Datei nicht öffnen/konvertieren. Es wird funktionieren, wenn Sie das Gleichheitszeichen entfernen, also "VALUE", - Excel wird die Datei immer noch öffnen, aber die Tatsache ignorieren, dass Ihre Spalten Zeichenketten sein sollen.

-2
-2
-2
2013-01-13 23:23:56 +0000

Eine einfache Möglichkeit, Excel zu zwingen, das Datum als Text zu interpretieren, besteht darin, dem Datum ein einfaches Anführungszeichen voranzustellen, anstatt volle Anführungszeichen zu verwenden, wie in:

‘10/11/2002

Wenn Sie die CSV-Datei importieren können, anstatt sie zu öffnen, können Sie Excel mitteilen, welches Format jede Spalte haben soll. Werfen Sie einen Blick auf diese Frage habe ich gestellt .

Verwandte Fragen

6
13
9
10
13