it-swarm.com.de

Durch Formatieren einer durch Kommas getrennten CSV-Datei wird Excel gezwungen, den Wert als Zeichenfolge zu interpretieren

Ich habe lange gesucht, um herauszufinden, wie man eine CSV-Datei so ausgibt, dass Excel die Werte als Zeichenfolge interpretiert und nicht versucht, sie in Zahlen oder Datumsangaben umzuwandeln.

z.B.:

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

Excel versucht, all diese Daten "intelligent" in die nativen Datums-/Zahlenformate zu konvertieren. Gibt es einen Weg, um das zu umgehen?


EDIT: Klargestellt die Absicht meiner Frage, sorry für die Verwirrung.

54
Simon East

Für diejenigen, die die Kontrolle über die Quelldaten haben, erkennt Excel anscheinend das Format eines CSV-Felds automatisch, es sei denn, die CSV-Spalte hat das folgende Format:

"=""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, ist sich jedoch nicht sicher, ob andere Spreadsheet-Apps diese Notation unterstützen.

Wenn Sie den Verdacht haben, dass die Daten selbst Anführungszeichen enthalten könnten, müssen Sie double-escape diese wie folgt ausführen ...

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



(EDIT: Aktualisiert mit Korrekturen, danke DMA57361!)

57
Simon East

Wie viele andere habe ich mit denselben Entscheidungen zu kämpfen gehabt, die Microsoft getroffen hat, und verschiedene Lösungsvorschläge ausprobiert.

Für Excel 2007 gilt Folgendes:

  • Alle Werte in doppelte Anführungszeichen zu setzen, hilft NICHT
  • Wenn Sie ein = vor alle Werte setzen, nachdem Sie sie in doppelte Anführungszeichen gesetzt haben, hilft das, ABER die CSV-Datei für die meisten anderen Anwendungen unbrauchbar zu machen
  • Die doppelten Anführungszeichen um alle Werte in Klammern zu setzen, ist Unsinn
  • Wenn Sie vor allen Werten ein Leerzeichen einfügen, bevor Sie sie in doppelte Anführungszeichen setzen, wird die Konvertierung in Datumsangaben verhindert, das Trimmen von führenden oder nachfolgenden Nullen wird jedoch NICHT verhindert.
  • Das Einfügen eines einfachen Anführungszeichens vor einen Wert funktioniert nur, wenn Daten in Excel eingegeben werden.

Jedoch:

Setzen Sie einen Tabulator vor alle Werte, bevor Sie sie in doppelte Anführungszeichen setzen. Verhindert Konvertierungen in Datumsangaben und das Trimmen von führenden oder nachfolgenden Nullen. Das Blatt zeigt nicht einmal böse Warnmarkierungen in der oberen linken Ecke jeder Zelle.

Z.B.:

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

Beachten Sie, dass das Tabulatorzeichen in doppelten Anführungszeichen stehen muss. Bearbeiten: Es stellt sich heraus, dass die doppelten Anführungszeichen nicht einmal notwendig sind.

Durch Doppelklicken auf die CSV-Datei kann die Datei in Excel als Tabellenkalkulation geöffnet werden, in der alle Werte angezeigt werden, die wie oben beschrieben behandelt werden, z. B. Textdaten. Stellen Sie sicher, dass Excel das 'verwendet.' als Dezimalpunkt und nicht als ',' oder jede Zeile der CSV-Datei wird als ein Text in der ersten Zelle jeder Zeile ausgegeben. Anscheinend glaubt Microsoft, dass CSV "Nicht der Dezimalpunkt" bedeutet. Getrennter Wert.

32
ajabo

Mit der Importfunktion von Excel können Sie das Format (Auto, Text oder Datum) festlegen, als das jede Spalte interpretiert werden soll, und es sind keine Änderungen an den Datendateien erforderlich.

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

Hier ist ein Bild des Excel 2003-Textimports Wizard in Aktion für die angegebenen Beispieldaten. Es zeigt, wie ich die letzten beiden Spalten als Text importiere:

Excel 2003: Text Import Wizard on Step 3 - data types

20
DMA57361

Das Beispiel von Simon hat bei mir nicht funktioniert, und ich vermute, es ist ein Sprachunterschied. In C # sieht meine Arbeitsformatzeichenfolge folgendermaßen 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 zu sehen ist, ist das Format in der Ausgabedatei ="VALUE", und nicht "=""VALUE""",, von dem ich glaube, dass es sich um eine Visual Basic-Konvention handelt.

Ich verwende Excel 2010. Im Übrigen kann Google Sheets eine auf diese Weise formatierte Datei nicht öffnen/konvertieren. Wenn Sie das Gleichheitszeichen entfernen, funktioniert dies. "VALUE", - Excel öffnet die Datei weiterhin, ignoriert jedoch die Tatsache, dass Ihre Spalten Zeichenfolgen sein sollen.

1
Shane