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

64

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, das zu umgehen?


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

Simon East
quelle

Antworten:

67

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 sie wie folgt doppelt maskieren ...

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



(EDIT: Aktualisiert mit Korrekturen, danke DMA57361!)

Simon East
quelle
Awesome, wir müssen nur die Daten ändern .. seufzen
Teuer
4
Diese letzte Spalte sollte "=""123"""ansonsten schlecht geformt sein. Felder, die ein enthalten, "müssen abgegrenzt werden, und die "s im Feld müssen mit anderen "s maskiert werden.
DMA57361
@ DMA57361 Eigentlich ist es in Ordnung, die anderen beiden Felder daneben haben kein vorangestelltes Gleichheitszeichen. Er hat die Formel dieser Zelle so eingestellt, dass sie eine Zeichenfolge zurückgibt. Um dies ebenfalls zu vermeiden, können Sie den Datentyp der Zelle auf "Text" setzen.
Durchbruch
2
@Durchbrechen dieser Tabelle repräsentiert eine CSV-Datei, keine Excel-Felder. Der letzte Wert ="123"ist kein gültiges CSV-Feld, da er das Feldtrennzeichen enthält, " ohne es oder das Feld richtig zu begrenzen. Die Tatsache, dass Excel es zufällig als Formel liest, hängt rein von Excel ab und hat nichts mit der CSV-Datei zu tun.
DMA57361
2
@PriceChild, der Punkt meiner ursprünglichen Frage (die ich nicht wirklich gut erklärt habe) war eigentlich, wie man die CSV formatiert, um es den Benutzern so einfach wie möglich zu machen. Das ist also die Antwort, die ich selbst gefunden habe und posten wollte. DMA57361 hat auch eine hilfreiche Korrektur gebracht, danke!
Simon East
36

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 macht die CSV-Datei für die meisten anderen Anwendungen unbrauchbar
  • Die doppelten Anführungszeichen um alle Werte in Klammern zu setzen, ist Blödsinn
  • 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 in Excel das '.' Als Dezimalpunkt und nicht als ',' oder jede Zeile der CSV-Datei wird ein Text in der ersten Zelle jeder Zeile angezeigt. Anscheinend glaubt Microsoft, dass CSV "Nicht der Dezimalpunkt" bedeutet. Getrennter Wert.

ajabo
quelle
Dieser Tabulatortrick ersparte mir den Tag, Excel wandelte sehr lange numerische Werte in Zahlen um und verlor nach dem 15. alle Ziffern. Es ist gelungen, Excel zu veranlassen, sie als Text mit dem Tabulatorpräfix zu behandeln. Funktioniert also auch für Zahlen, nicht nur für Daten.
Markus Yrjölä
Das ist wirklich nützlich, danke!
Flavio
22

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 Datain Excel 2003.

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

Excel 2003: Textimport-Assistent in Schritt 3 - Datentypen

DMA57361
quelle
Ausgezeichnete Antwort DMA57361, danke für das ganze Detail. Was ich in meiner Frage nicht wirklich erwähnt habe, war, dass ich ein Skript schreibe, das Daten nach Excel exportiert. Daher habe ich versucht, zu verhindern, dass Benutzer durch verwirrende Optionen wie diese springen müssen. Aber ich habe dich trotzdem gewählt. :-)
Simon East
@ Simon, in was schreibst du das Drehbuch? Wie kann man es schaffen, dass tatsächliche Excel-Dateien direkt erstellt werden, anstatt über ein Zwischenformat zu arbeiten?
DMA57361
Es ist ein PHP-Skript, das eine Datenbanktabelle exportiert. Mit CSV lässt sich wahrscheinlich am einfachsten arbeiten, aber Sie haben Recht, ich könnte wahrscheinlich eine XLS mit Hilfe von Open-Source-Code erstellen, oder auch nur eine HTML-Tabelle, von der ich denke, dass sie in Excel vernünftige Ergebnisse liefert (erlaubt) Farben & Formatierung etc., aber nicht sicher über Datentypen).
Simon East
1
Es gibt ein paar Fragen zu PHP → Excel auf SO, die ersten, die ich ausprobiert habe, haben alle eine Antwort auf PHP Excel , das könnte also einen Blick wert sein.
DMA57361
das ist sehr hilfreich, nachdem ich einige Antworten
gelesen
1

Das Beispiel von Simon hat bei mir nicht funktioniert, und ich vermute, dass es sich um einen Sprachunterschied handelt. 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",nicht "=""VALUE""",das, von dem ich glaube, dass es eine Visual Basic-Konvention ist.

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

Shane
quelle
-2

Eine einfache Möglichkeit, Excel zu zwingen, das Datum als Text zu interpretieren, besteht darin, ein einfaches Anführungszeichen vor das Datum zu setzen, anstatt vollständige Anführungszeichen zu verwenden, wie in:

'10 / 11/2002

Wenn Sie die CSV importieren können, anstatt sie zu öffnen, können Sie Excel mitteilen, in welchem ​​Format die einzelnen Spalten vorliegen sollen. Schauen Sie sich diese Frage an, die ich gestellt habe .

hdhondt
quelle
5
Heruntergestuft, da dies NICHT in CSV-Dateien funktioniert, die in Excel importiert werden. Excel interpretiert das Zitat als wörtliches Zitat und zeigt es daher in der Zelle an.
Psynnott