Verhindern Sie, dass Excel bestimmte Textwerte automatisch in Datumsangaben konvertiert


526

Weiß jemand zufällig, ob es ein Token gibt, das ich für ein bestimmtes Feld zu meiner CSV hinzufügen kann, damit Excel nicht versucht, es in ein Datum zu konvertieren?

Ich versuche, eine CSV-Datei aus meiner Anwendung zu schreiben, und einer der Werte sieht so aus wie ein Datum, dass Excel es automatisch von Text in ein Datum konvertiert. Ich habe versucht, alle meine Textfelder (einschließlich des Felds, das wie ein Datum aussieht) in doppelte Anführungszeichen zu setzen, aber das hat keine Auswirkung.


120
Ja, wie wenn eine Datei mit 10000 Benutzernamen einen wie "april25" hat, der in ein Datum konvertiert und schließlich als "apr-25" verarbeitet wird, was zu einem Fehler "Benutzername nicht gefunden" führt, weil Sie dies nicht getan haben Erwarten Sie, dass Excel einen einzelnen Wert in ein Datum mit 4000 Datensätzen in die Datei konvertiert und den restlichen Text belässt. Was für ein lahmer CSV-Lesecode; Soll es nicht wirklich den Typ erraten, der auf den ersten X-Datensätzen basiert, und dabei bleiben? Oder lassen Sie alles Text. Wenn ich möchte, dass es als "allgemein" formatiert wird, kann ich das später auswählen. Wenn Sie von Anfang an von "allgemein" ausgehen, besteht die Gefahr, dass Textdaten beschädigt werden.
Triynko

Ich hatte das Problem beim Kopieren und Einfügen. Wählen Sie für alle Suchvorgänge in der Lösung die Zielspalte aus, stellen Sie sie auf ein Zeichenfolgen- / Textformat ein, kopieren Sie die Quelle und führen Sie eine spezielle Einfügung (Rechtsklick) mit "Nur Werte" durch. Erhält Werte, keine Datumsformatierung.
Kai Noack

84
Ich möchte nur hinzufügen, dass ich dieses Verhalten von Excel als schwerwiegenden Fehler betrachte. Was ist mit all den Leuten, die nicht den Luxus haben, den Inhalt der CSV-Datei vor dem Import in Excel zu ändern? Oder was ist mit Leuten, die dieses Problem erst erkennen, nachdem sie viele andere Änderungen an der CSV-Datei vorgenommen haben? Das Arbeiten mit CSV-Dateien in Excel wird dadurch zu einem Chaos.
Robguinness

Verwenden Sie DatatableJS? Weil ich bereits weiß, wie man das mit dieser API macht. Wenn Sie dies benötigen, finden Sie es hier: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
Alle diese Lösungen zur Verwendung von Datei -> Öffnen -> Importieren funktionieren für uns in Ordnung, da wir wissen, was wir tun, aber es ist für die anderen 99,5% der Welt nutzlos, die das Navigieren im Dateisystem von / innerhalb / an nicht verstehen Anwendung. Sie sehen eine Datei, um sie zu verwenden, doppelklicken Sie darauf. Ich habe 25 Jahre lang Menschen beigebracht, wie man Büroanwendungen verwendet und Code schreibt, der Daten für diese Büroanwendungen generiert, und die Verwendung der Datei / application / zur Suche nach der zu verwendenden Datei ist für fast jeden unerreichbar.
user2624417

Antworten:


355

Ich habe festgestellt, dass das Setzen eines '=' vor den doppelten Anführungszeichen das erreicht, was Sie wollen. Es erzwingt, dass die Daten Text sind.

z.B. = "2008-10-03", = "mehr Text"

BEARBEITEN (laut anderen Beiträgen) : Aufgrund des von Jeffiekins festgestellten Excel 2007-Fehlers sollte die von Andrew vorgeschlagene Lösung verwendet werden :"=""2008-10-03"""


12
Ich akzeptiere diese Antwort, weil 1) meine CSV-Datei nur von Excel verwendet wird und 2) dies für die Buchhaltung dient und am Anfang kein 'haben kann, und 3) ich nicht möchte, dass sie dies tun müssen ein Import. Ich möchte nur, dass sie die CSV öffnen.

5
Großartig! Verwenden Sie jedoch aufgrund des Excel 2007-Fehlers die von Andrew vorgeschlagene Lösung : "=""2008-10-03""". Der Beitrag wurde aktualisiert.
TMS

1
Dies funktioniert nicht für mich in Excel 2010, wenn der Text zu lang ist :(
Steve

7
Der Grund dafür ist, dass Excel, wenn es das Zeichen "=" sieht, beschließt, den darauf folgenden Ausdruck auszuwerten. In diesem Fall ist der Ausdruck einfach ein Zeichenfolgenliteral und der Wert eines Zeichenfolgenliteral ist der Inhalt der Zeichenfolge. So verschwinden die Anführungszeichen auf magische Weise. Sie können = 1 + 2 + 3 setzen und nach dem CSV-Import den Wert 6 erhalten. Die Formel selbst wird beim Importvorgang nicht zerstört.
Lokori

4
Es gibt ein großes Problem mit diesem Ansatz - wenn Sie die Datei in Excel öffnen und bearbeiten und dann speichern und wieder öffnen alle diese "verschwinden
ACV

150

Ich weiß, dass dies eine alte Frage ist, aber das Problem wird nicht bald verschwinden. CSV-Dateien lassen sich leicht aus den meisten Programmiersprachen generieren, sind eher klein, in einem Crunch mit einem einfachen Texteditor lesbar und allgegenwärtig.

Das Problem liegt nicht nur bei Datumsangaben in Textfeldern, sondern alles , was numerisch ist, wird auch von Text in Zahlen umgewandelt. Einige Beispiele, bei denen dies problematisch ist:

  • Postleitzahl
  • Telefonnummern
  • Regierungs-ID-Nummern

Dies kann manchmal mit einer oder mehreren Nullen (0) beginnen, die bei der Konvertierung in eine numerische Zahl weggeworfen werden. Oder der Wert enthält Zeichen, die mit mathematischen Operatoren verwechselt werden können (wie in Datum: /, -).

Zwei Fälle, an die ich denken kann, dass die "prepending =" - Lösung, wie bereits erwähnt, möglicherweise nicht ideal ist, ist

  • wo die Datei möglicherweise in ein anderes Programm als MS Excel importiert wird (die Seriendruckfunktion von MS Word fällt mir ein),
  • wo menschliche Lesbarkeit wichtig sein könnte.

Mein Hack, um das zu umgehen

Wenn dem Wert ein nicht numerisches und / oder nicht datiertes Zeichen vorangestellt wird, wird der Wert als Text erkannt und nicht konvertiert. Ein nicht druckbares Zeichen wäre gut, da es den angezeigten Wert nicht ändert. Das einfache alte Leerzeichen (\ s, ASCII 32) funktioniert hierfür jedoch nicht, da es von Excel abgeschnitten wird und der Wert dann immer noch konvertiert wird. Es gibt jedoch verschiedene andere druckbare und nicht druckbare Leerzeichen, die gut funktionieren. Am einfachsten ist es jedoch, das einfache Tabulatorzeichen (\ t, ASCII 9) anzuhängen (nachher hinzuzufügen).

Vorteile dieses Ansatzes:

  • Erhältlich über die Tastatur oder mit einem leicht zu merkenden ASCII-Code (9).
  • Es stört den Import nicht,
  • Normalerweise stören die Ergebnisse des Seriendrucks nicht (abhängig vom Vorlagenlayout - normalerweise wird jedoch nur ein großer Abstand am Ende einer Zeile hinzugefügt). (Wenn dies jedoch ein Problem darstellt, sehen Sie sich andere Zeichen an, z. B. den Raum mit der Breite Null (ZWSP, Unicode U + 200B).
  • ist kein großes Hindernis beim Anzeigen der CSV im Editor (usw.),
  • und könnte durch Suchen / Ersetzen in Excel (oder Editor usw.) entfernt werden.
  • Sie müssen die CSV nicht importieren , sondern können einfach doppelklicken, um die CSV in Excel zu öffnen .

Wenn es einen Grund gibt, warum Sie die Registerkarte nicht verwenden möchten, suchen Sie in einer Unicode-Tabelle nach etwas anderem Passendem.

Andere Option

Möglicherweise werden XML-Dateien generiert, für die ein bestimmtes Format auch von neueren MS Excel-Versionen für den Import akzeptiert wird und die viel mehr Optionen ähnlich dem XLS-Format zulassen, aber ich habe keine Erfahrung damit.

Es gibt also verschiedene Möglichkeiten. Abhängig von Ihren Anforderungen / Ihrer Anwendung ist möglicherweise eine besser als die andere.


Zusatz

Es muss gesagt werden, dass neuere Versionen (2013+) von MS Excel die CSV nicht mehr im Tabellenformat öffnen - ein weiterer Speedbump im Workflow macht Excel weniger nützlich ... Zumindest gibt es Anweisungen, um das Problem zu umgehen. Siehe z. B. diesen Stackoverflow: Wie werden CSV- Dateien in Excel 2013 korrekt angezeigt? .


6
Ich habe korrekte führende Nullen erhalten, nachdem ich \tmeinen Trennungscharakter hinzugefügt habe ;... Verdammt, MS Office, warum musste ich mehr als 2 Minuten brauchen, um das herauszufinden?
Morten Jensen

2
Das Hinzufügen von \ t am Ende aller Werte ist in der Tat der Trick. Es ist eine hackige Problemumgehung, aber in der Praxis funktioniert es gut. Ich ziehe dies dem Formeltrick mit dem gleichen '=' vor, da es in anderen Werkzeugen schwierig sein kann, mit dem ersteren zu arbeiten.
Okroquette

3
Es gibt nicht genug positive Stimmen, die meine Dankbarkeit für Sie ausdrücken können. Das Suchen und Ersetzen in Notepad ++ ',' bis '\ t, \ t' (auch für die erste und letzte Spalte) funktioniert wie ein Zauber. Vielen Dank.
Asaf

1
In meiner MySQL-Abfrage (für die CSV-Ausgabe über PHP) habe ich CONCAT ('\ t', column_name) verwendet. Hat auch den Trick gemacht. Vielen Dank!
Just Plain High

1
Großartige Idee. Leider ist Numbers ein bisschen "schlauer" als Excel und fällt nicht auf den Tab-Trick herein. Die beste Alternative, die ich finden kann, ist eine führende ', da sie irgendwie gut verstanden und nicht zu ablenkend ist ... aber eine unsichtbare wäre besser.
Heath Raftery

101

Wenn Sie an Jarods Lösung und dem von Jeffiekins angesprochenen Problem arbeiten, können Sie Änderungen vornehmen

"May 16, 2011"

zu

"=""May 16, 2011"""

6
Funktioniert in Excel 2010 nicht, wenn der Text länger als eine bestimmte Länge ist.
Steve

1
@ Andrew, Diese "Korrektur" verursacht Probleme, wenn Sie "irgendwo zwischen dem Datum Werte benötigen .
Pacerier

8
Zu Ihrer Information, wenn Sie die Excel-Datei speichern, verschwindet das = und Sie sind beim nächsten Öffnen wieder auf dem ersten Platz.
d512

Meine Erfahrung passt weder zu Steve noch zu d512. Es funktioniert für mich in der eingehenden CSV-Datei in Excel 2013 und wird nach dem Speichern als XLSX nicht zurückgesetzt. Für jeden leicht zu testen mit dieser Datenzeile: "806676", "Keine", "41", "=" "16. Mai 2011" "," 100.00 "," Falsch "
tbc0

1
@ tbc0 Versuchen Sie es "806676","None","41","=""05-16-2011""","100.00","False"stattdessen und Sie werden sehen, dass beim Speichern und erneuten Laden der getrennte Text verloren geht.
NetMage

65

Ich hatte ein ähnliches Problem und dies ist die Problemumgehung, die mir geholfen hat, ohne den Inhalt der CSV-Datei bearbeiten zu müssen:

Wenn Sie die Flexibilität haben, die Datei anders als ".csv" zu benennen, können Sie sie mit der Erweiterung ".txt" benennen, z. B. "Myfile.txt" oder "Myfile.csv.txt". Wenn Sie es dann in Excel öffnen (nicht per Drag & Drop, sondern über Datei-> Öffnen oder die Liste der zuletzt verwendeten Dateien), bietet Excel Ihnen einen "Textimport-Assistenten".

Wählen Sie auf der ersten Seite des Assistenten als Dateityp "Begrenzt" aus.

Wählen Sie auf der zweiten Seite des Assistenten "," als Trennzeichen und wählen Sie auch das Textqualifikationsmerkmal, wenn Sie Ihre Werte in Anführungszeichen gesetzt haben

Wählen Sie auf der dritten Seite jede Spalte einzeln aus und weisen Sie jedem den Typ "Text" anstelle von "Allgemein" zu, um zu verhindern, dass Excel mit Ihren Daten in Konflikt gerät.

Hoffe das hilft dir oder jemandem mit einem ähnlichen Problem!


2
Oh, übrigens bin ich nicht der erste, der das entdeckt. ascendline.com/use-excel-read-csv-without-reformatting.php Diese Webseite enthält auch die hilfreiche Anweisung, dass Sie bei gedrückter Umschalttaste auf die Spalten auf der dritten Seite des Assistenten klicken können, um sie alle zusammen auszuwählen, bevor Sie jedem den Typ zuweisen "Text".
Rainerbit

Dies mag für Datumswerte funktionieren, aber es scheint nicht für Dinge zu funktionieren, die Excel als numerisch interpretieren. Wenn Ihre Zeichenfolge nur aus Zahlen und Kommas besteht, ist das Format "Text" ein wissenschaftliches Zahlenformat.
Michael - Wo ist Clay Shirky

3
Dies funktionierte perfekt für mich und beinhaltete keine Änderungen an meiner Datei, außer um sie in .txt umzubenennen. Vielen Dank.
Kevin

1
Leider können Sie dies in Excel nur für die ersten 6 Spalten tun. Wenn Sie mehr benötigen, ist es besser, den Inhalt der CSV zu kopieren, eine Excel-Datei zu erstellen und zu leeren, alle Spalten / Zeilen auszuwählen und den Typ auf Text zu setzen, dann den Inhalt einzufügen und Daten | zu verwenden Text zu Spalten
Nachocab

Dies ist die beste Lösung und sollte als Antwort markiert werden.
Rob

28

WARNUNG: Excel '07 hat (zumindest) einen (weiteren) Fehler: Wenn der Inhalt eines Feldes ein Komma enthält, wird das = "Feld, Inhalt" nicht korrekt analysiert, sondern alles nach dem Komma in das Feld eingefügt folgendes Feld, unabhängig von den Anführungszeichen.

Die einzige Problemumgehung, die ich gefunden habe, besteht darin, das = zu entfernen, wenn der Feldinhalt ein Komma enthält.

Dies kann bedeuten, dass es einige Felder gibt, die in Excel nicht genau "richtig" dargestellt werden können, aber ich vertraue darauf, dass niemand zu überrascht ist.


Ich habe dies gerade in Excel 2007 getestet und es funktioniert für mich richtig. Wenn jedoch vor den Anführungszeichen ein führendes Leerzeichen steht, wird das Komma nicht korrekt analysiert.
Sunny88

8
Dies scheint laut RFC 4180 kein Fehler zu sein. Der richtige Weg, das Feld in Anführungszeichen zu setzen, besteht darin, das gesamte Feld in Anführungszeichen zu setzen und dann interne Anführungszeichen in doppelte Anführungszeichen zu setzen. Also "=" "Feld, Inhalt" " tools.ietf.org/html/rfc4180
Peter Stephens

2
@PeterStephens, das funktioniert nicht, wenn field, contentes "drin ist. ZB"=""field, co""ntent"""
Pacerier

1
@Pacerier Wahrscheinlich muss das eingebettete Zitat in doppelte Anführungszeichen gesetzt werden """".
ErikE

Ich kann bestätigen, dass der Vorschlag von @ ErikE korrekt ist. Für ein Feld mit dem Wert 1"2, wenn Sie sich für diesen Trick verwenden (im Gegensatz zu nur so dass es wie seine "1""2"in der Datei - Excel wäre bereits als Text behandelt), dann die endgültige richtige Zeichenfolge in der Excel-Targeting - CSV - Datei endet Sein "=""1""""2""".
Tao

22

Beim Erstellen der Zeichenfolge, die in C # in meine CSV-Datei geschrieben werden soll, musste ich sie folgendermaßen formatieren:

"=\"" + myVariable + "\""

2
das hat mich auch in Rails geweckt. Vielen Dank
Vieenay Siingh

3
Funktioniert auch auf Java
Shoyo

Arbeitete für mich in JavaScript mit Papa Parse.
Wobsoriano

17

2018

Die einzig richtige Lösung, die für mich funktioniert hat (und auch ohne die CSV zu ändern ).

Excel 2010:

  1. Erstellen Sie eine neue Arbeitsmappe
  2. Daten> Aus Text> Wählen Sie Ihre CSV-Datei aus
  3. Wählen Sie im Popup das Optionsfeld "Begrenzt" und klicken Sie auf "Weiter>".
  4. Kontrollkästchen für Trennzeichen: Aktivieren Sie nur "Komma" und deaktivieren Sie die anderen Optionen. Klicken Sie dann auf "Weiter>".
  5. Scrollen Sie in der "Datenvorschau" ganz nach rechts, halten Sie die Umschalttaste gedrückt und klicken Sie auf die letzte Spalte (dadurch werden alle Spalten ausgewählt). Wählen Sie nun im "Spaltendatenformat" das Optionsfeld "Text" und klicken Sie auf "Fertig stellen".

Excel Office365: (Client-Version)

  1. Erstellen Sie eine neue Arbeitsmappe
  2. Daten> Aus Text / CSV> Wählen Sie Ihre CSV-Datei aus
  3. Datentyperkennung> nicht erkennen

Hinweis: Excel Office365 (Webversion), während ich dies schreibe, können Sie dies nicht tun.


3
Dies funktioniert, ohne die CSV-Dateien vorher zu ändern. Ich denke, dies sollte die richtige Antwort sein.
Jack

Das sieht nach der richtigen Antwort aus. Ich hatte große Hoffnungen. Unter MacOS (office365) kann ich jedoch nicht ALLE Spalten auswählen : Es gibt keinen horizontalen Bildlauf im Vorschaufenster, das im Textimport- Assistenten angezeigt wird, sodass ich nur die sichtbaren Spalten auswählen kann. Ich habe Abkürzungen (CMD + A oder andere Dinge) ohne Erfolg ausprobiert. Die Option "Nicht erkennen" existiert ebenfalls nicht. Ich bin am Boden zerstört.
Normanius

Wählen Sie in Excel Office 365 Datei, Optionen, Daten. Es gibt Kontrollkästchen, mit denen die Assistenten zum Importieren älterer Daten bei Bedarf angezeigt werden.
Kurt Schultz

15

Öffnen Sie in Excel 2010 ein neues Blatt. Klicken Sie im Datenband auf "Externe Daten aus Text abrufen". Wählen Sie Ihre CSV-Datei aus und klicken Sie auf "Öffnen". Weiter klicken". Deaktivieren Sie "Tab", setzen Sie ein Häkchen neben "Komma" und klicken Sie dann auf "Weiter". Klicken Sie auf eine beliebige Stelle in der ersten Spalte. Halten Sie die Umschalttaste gedrückt, und ziehen Sie den Schieberegler so lange, bis Sie in die letzte Spalte klicken können. Lassen Sie dann die Umschalttaste los. Klicken Sie auf das Optionsfeld "Text" und dann auf "Fertig stellen".

Alle Spalten werden wie in der CSV-Datei als Text importiert.


1
Ich bin auf dasselbe Problem gestoßen, aber das sorgfältige Befolgen der Anweisungen von @ Rob würde perfekt funktionieren!. Vielen Dank
Milacay

2
Der Assistent für Daten aus Text unterstützt leider keine mehrzeiligen Zellen. Wenn ein solcher mehrzeiliger Text auftritt, werden alle Zeilen nach der ersten in neue Zeilen geschrieben, wodurch der gesamte Import unterbrochen wird. Die Zeilenumbrüche werden nur dann richtig interpretiert, wenn Sie die CSV-Datei durch Doppelklick öffnen. Verdammt Microsoft ...
CodeManX

1
Leider löst dies nicht das Problem der zufälligen Formatierungshilfe "Excel" - der Text DEC1 wird immer noch auf das Datum Dez-01 geändert . Gleiches gilt für den Text von JJJJ-MM-TT, der auf TT / MM / JJJJ umgeschaltet wird. :(
Baracus

12

Immer noch ein Problem in der Microsoft Office 2016-Version, das für diejenigen von uns, die mit Gennamen wie MARC1, MARCH1, SEPT1 usw. arbeiten, ziemlich störend ist. Die Lösung, die ich nach dem Generieren einer ".csv" -Datei in R als die praktischste empfunden habe, Das wird dann geöffnet / für Excel-Benutzer freigegeben:

  1. Öffnen Sie die CSV-Datei als Text (Notizblock)
  2. Kopieren Sie es (Strg + a, Strg + c).
  3. Fügen Sie es in ein neues Excel-Blatt ein. Es werden alle als lange Textzeichenfolgen in eine Spalte eingefügt.
  4. Wählen Sie diese Spalte aus.
  5. Gehen Sie zu Daten- "Text in Spalten ..." und wählen Sie im geöffneten Fenster "Begrenzt" (weiter). Überprüfen Sie, ob "Komma" markiert ist (durch Markieren wird bereits die Trennung der Daten in die folgenden Spalten angezeigt) (weiter). In diesem Fenster können Sie die gewünschte Spalte auswählen und als Text markieren (anstelle von "Allgemein") (Fertig stellen).

HTH


Der manuelle Aufwand war auch für mich unattraktiv. Nachdem jedoch alle Möglichkeiten ausgeschöpft waren, war diese die robusteste und zuverlässigste.
Ana Maria Mendes-Pereira

Stapelverarbeitung trotzdem.
Ana Maria Mendes-Pereira

Dies ist tatsächlich die beste Antwort, die den geringsten Arbeitsaufwand erfordert. Ich wünschte, Sie könnten einfach eine Option festlegen, um zu erzwingen, dass die Datei nicht analysiert wird.
rollt

Sie können auch alle Kommas durch Tabulatoren ersetzen, dann wird es automatisch getrennt
rollt

10

Hier ist die einfache Methode, die wir hier bei der Generierung der CSV-Datei verwenden. Sie ändert die Werte ein wenig, sodass sie nicht für alle Anwendungen geeignet ist:

Stellen Sie allen Werten in der CSV ein Leerzeichen voran

Dieser Bereich wird durch Excel von Zahlen wie "1", "2.3" und "-2.9e4" entfernt, bleibt jedoch an Daten wie "01/10/1993" und Booleschen Werten wie "TRUE" erhalten und verhindert, dass sie in konvertiert werden interne Datentypen von Excel.

Es verhindert auch, dass doppelte Anführungszeichen beim Einlesen gezappt werden, sodass eine kinderleichte Methode zum Erstellen von Text in einer CSV durch Excel unverändert bleibt, AUCH WENN ein Text wie "3.1415" darin besteht, ihn mit doppelten Anführungszeichen zu umgeben UND der gesamten Zeichenfolge ein Leerzeichen voranzustellen. dh (mit einfachen Anführungszeichen, um zu zeigen, was Sie eingeben würden) '"3.1415"'. Dann haben Sie in Excel immer die ursprüngliche Zeichenfolge, außer dass sie von doppelten Anführungszeichen umgeben und durch ein Leerzeichen vorangestellt ist, sodass Sie diese in beliebigen Formeln usw. berücksichtigen müssen.


Das hat bei mir funktioniert. Ich hatte einige Werte wie 1-1-1, die automatisch in Datumsangaben konvertiert werden. Wie bereits erwähnt, wird der Speicherplatz übertragen, sodass der Wert geändert wird, aber ich mache beim Parsen einen Streifen darauf, sodass dies für mich keine große Sache ist.
Jacklin

Das Leerzeichen verhindert nicht länger die Interpretation des Datums oder das Entfernen führender Nullen. Sie können jedoch "\xA0"stattdessen einen nicht unterbrechenden Bereich verwenden - das wird funktionieren.
Doin

8

(Angenommen, Excel 2003 ...)

Wenn Sie den Text-zu-Spalten-Assistenten verwenden, können Sie in Schritt 3 den Datentyp für jede der Spalten festlegen. Klicken Sie auf die Spalte in der Vorschau und ändern Sie die Spalte "Fehlverhalten" von "Allgemein" in "Text".


8
Dies ist eine ausgezeichnete Wahl, wenn ich den Benutzer zwingen könnte, den Importvorgang zu verwenden.

Dies hilft dem Problem eigentlich nicht, da die Zahlen in der TEXT-Spalte beim Export nach .csv sowieso in NUMBERS konvertiert werden ...
Chonez

8

Dies ist eine einzige Möglichkeit, wie ich dies erreichen kann, ohne die Datei selbst durcheinander zu bringen. Wie bei Excel üblich, habe ich dies gelernt, indem ich stundenlang mit dem Kopf auf den Schreibtisch geschlagen habe.

Ändern Sie die CSV-Dateierweiterung in .txt. Dadurch wird verhindert, dass Excel die Datei beim Öffnen automatisch konvertiert. So mache ich das: Öffnen Sie Excel für ein leeres Arbeitsblatt, schließen Sie das leere Blatt, dann Datei => Öffnen und wählen Sie Ihre Datei mit der Erweiterung .txt aus. Dies zwingt Excel, den "Textimport-Assistenten" zu öffnen, in dem Sie gefragt werden, wie die Datei interpretiert werden soll. Zuerst wählen Sie Ihr Trennzeichen (Komma, Tabulator usw.), dann (hier ist der wichtige Teil) eine festgelegte Spalte mit Spalten und wählen die Formatierung aus. Wenn Sie genau wissen möchten, was in der Datei enthalten ist, wählen Sie "Text". In Excel wird nur angezeigt, was sich zwischen den Trennzeichen befindet.


Dies funktionierte für mich am 03.03.2015, als ich mit Excel für Mac 2011 (Version 14.4.8 150116) arbeitete und mit den Daten in der SO-Frage arbeitete. awkVermeiden Sie die Neuformatierung datumsähnlicher Werte , wenn das Problem eher bei Excel liegt als awktrotz des Fragentitels.
Jonathan Leffler

4

(EXCEL 2007 und höher)

So erzwingen Sie, dass Excel Datumsformate nicht "erkennt", ohne die Quelldatei zu bearbeiten

Entweder:

  • Benennen Sie die Datei in .txt um
  • Wenn Sie dies nicht tun können, erstellen Sie eine neue Arbeitsmappe, anstatt die CSV-Datei direkt in Excel zu öffnen,
    Data > Get external data > From Text
    und wählen Sie dann Ihre CSV aus.

In beiden Fällen werden Ihnen Importoptionen angezeigt. Wählen Sie einfach jede Spalte mit Datumsangaben aus und weisen Sie Excel an, das Format als "Text" und nicht als "Allgemein" zu formatieren.


4

Was ich für dasselbe Problem getan habe, war, vor jedem CSV-Wert Folgendes hinzuzufügen: "=" "" und ein doppeltes Anführungszeichen nach jedem CSV-Wert, bevor die Datei in Excel geöffnet wurde. Nehmen Sie zum Beispiel die folgenden Werte:

012345,00198475

Diese sollten vor dem Öffnen in Excel geändert werden, um:

"="""012345","="""00198475"

Danach wird jeder Zellenwert in Excel als Formel angezeigt und daher nicht als Zahl, Datum usw. formatiert. Der Wert 012345 wird beispielsweise wie folgt angezeigt:

="012345"

Ein anderer Ansatz ist das Speichern der Nummer in der CSV als 1234500198475E-8; Auf diese Weise sind weitere Berechnungen in Excel möglich.
Bert Bruynooghe

4

Keine der hier angebotenen Lösungen ist eine gute Lösung. Dies kann in Einzelfällen funktionieren, jedoch nur, wenn Sie die Kontrolle über die endgültige Anzeige haben. Nehmen Sie mein Beispiel: Meine Arbeit erstellt eine Liste der Produkte, die sie an den Einzelhandel verkaufen. Dies ist im CSV-Format und enthält Teilcodes, von denen einige mit Nullen beginnen, die vom Hersteller festgelegt wurden (nicht unter unserer Kontrolle). Nehmen Sie die führenden Nullen weg, und Sie können tatsächlich mit einem anderen Produkt übereinstimmen. Privatkunden möchten die Liste im CSV-Format, da Back-End-Verarbeitungsprogramme ebenfalls außerhalb unserer Kontrolle liegen und sich je nach Kunde unterscheiden. Daher können wir das Format der CSV-Dateien nicht ändern. Kein vorangestelltes '=' und keine hinzugefügten Registerkarten. Die Daten in den CSV-Rohdateien sind korrekt. Wenn Kunden diese Dateien in Excel öffnen, beginnen die Probleme. Und viele Kunden sind nicht wirklich Computer-versiert. Sie können fast einen E-Mail-Anhang öffnen und speichern. Wir denken darüber nach, die Daten in zwei leicht unterschiedlichen Formaten bereitzustellen: eines als Excel-freundlich (unter Verwendung der oben vorgeschlagenen Optionen durch Hinzufügen eines TAB, das andere als "Master". Dies kann jedoch ein Wunschdenken sein, da einige Kunden nicht verstehen, warum Wir müssen dies tun. In der Zwischenzeit erklären wir immer wieder, warum sie manchmal "falsche" Daten in ihren Tabellen sehen. Bis Microsoft eine ordnungsgemäße Änderung vornimmt, sehe ich keine angemessene Lösung dafür, solange man keine Kontrolle darüber hat, wie Endbenutzer Verwenden Sie die Dateien. Dies kann jedoch ein Wunschdenken sein, da einige Kunden nicht verstehen, warum wir dies tun müssen. In der Zwischenzeit erklären wir immer wieder, warum sie manchmal "falsche" Daten in ihren Tabellen sehen. Bis Microsoft eine ordnungsgemäße Änderung vornimmt, sehe ich keine ordnungsgemäße Lösung dafür, solange man keine Kontrolle darüber hat, wie Endbenutzer die Dateien verwenden. Dies kann jedoch ein Wunschdenken sein, da einige Kunden nicht verstehen, warum wir dies tun müssen. In der Zwischenzeit erklären wir immer wieder, warum sie manchmal "falsche" Daten in ihren Tabellen sehen. Bis Microsoft eine ordnungsgemäße Änderung vornimmt, sehe ich keine ordnungsgemäße Lösung dafür, solange man keine Kontrolle darüber hat, wie Endbenutzer die Dateien verwenden.


Wenn ein zusätzlicher Speicherplatz links von Ihren Daten keine Rolle spielt, können Sie die Probleme von Excel beheben, indem Sie "\xA0"Ihren Daten einen vorangestellten (nicht unterbrechenden Speicherplatz) voranstellen .
Doin

3

Ich bin diese Woche auf diese Konvention gestoßen, die ein ausgezeichneter Ansatz zu sein scheint, aber ich kann sie nirgendwo finden, auf die verwiesen wird. Ist jemand damit vertraut? Können Sie eine Quelle dafür zitieren? Ich habe nicht stundenlang gesucht, hoffe aber, dass jemand diesen Ansatz erkennt.

Beispiel 1: = ("012345678905") wird angezeigt als 012345678905

Beispiel 2: = ("1954-12-12") wird als 1954-12-12 angezeigt , nicht als 12/12/1954 .


2

Es ist nicht das Excel. Windows erkennt die Formel, die Daten als Datum und korrigiert sie automatisch. Sie müssen die Windows-Einstellungen ändern.

"Systemsteuerung" (-> "Zur klassischen Ansicht wechseln") -> "Regional- und Sprachoptionen" -> Registerkarte "Regionaloptionen" -> "Anpassen ..." -> Registerkarte "Zahlen" -> Ändern Sie dann die Symbole je nachdem was du willst.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Dies funktioniert auf Ihrem Computer. Wenn diese Einstellungen beispielsweise auf dem Computer Ihrer Kunden nicht geändert werden, werden anstelle von Daten Datumsangaben angezeigt.


2

Hallo, ich habe das gleiche Problem,

Ich schreibe dieses vbscipt, um eine andere CSV-Datei zu erstellen. Die neue CSV-Datei enthält in jedem Feld ein Leerzeichen in der Schriftart, sodass Excel es als Text versteht.

Sie erstellen also eine .vbs-Datei mit dem folgenden Code (z. B. Modify_CSV.vbs), speichern und schließen sie. Ziehen Sie Ihre Originaldatei per Drag & Drop in Ihre vbscript-Datei. Es wird eine neue Datei mit "SPACE_ADDED" zum Dateinamen am selben Speicherort erstellt.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Ohne Ihre CSV-Datei zu ändern, können Sie:

  1. Ändern Sie die Option Excel-Formatzellen in "Text".
  2. Verwenden Sie dann den "Textimport-Assistenten", um die CSV-Zellen zu definieren.
  3. Nach dem Import löschen Sie diese Daten
  4. dann einfach als Klartext einfügen

Excel formatiert und trennt Ihre CSV-Zellen ordnungsgemäß als Textformat, wobei automatische Datumsformate ignoriert werden.

Eine Art alberne Umgehung, aber es ist besser, die CSV-Daten vor dem Import zu ändern. Andy Baird und Richard haben sich dieser Methode irgendwie entzogen, aber ein paar wichtige Schritte verpasst.


1

Ich weiß, dass dies ein alter Thread ist. Für diejenigen wie mich, die immer noch dieses Problem mit Office 2013 über das Powershell-Com-Objekt haben, kann die Opentext-Methode verwendet werden . Das Problem ist, dass diese Methode viele Argumente hat, die sich manchmal gegenseitig ausschließen. Um dieses Problem zu beheben, können Sie die in diesem Beitrag vorgestellte Methode invoke-namedparameter verwenden . Ein Beispiel wäre

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Leider habe ich gerade entdeckt, dass diese Methode die CSV-Analyse irgendwie unterbricht, wenn Zellen Zeilenumbrüche enthalten. Dies wird von csv unterstützt, aber die Implementierung von Microsoft scheint fehlerhaft zu sein. Außerdem wurden deutsche spezifische Zeichen irgendwie nicht erkannt. Die richtige Kultur zu geben, änderte nichts an diesem Verhalten. Alle Dateien (CSV und Skript) werden mit utf8-Codierung gespeichert. Zuerst habe ich den folgenden Code geschrieben, um die CSV Zelle für Zelle einzufügen.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Aber das ist extrem langsam, weshalb ich nach einer Alternative gesucht habe. Anscheinend können Sie in Excel die Werte eines Zellbereichs mit einer Matrix festlegen. Also habe ich den Algorithmus in diesem Blog verwendet, um die CSV in ein Multiarray umzuwandeln.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Sie können den obigen Code so verwenden, wie er alle CSVs in Excel konvertieren sollte. Ändern Sie einfach den Pfad zum CSV und dem Trennzeichen unten.


zu kompliziert
rollt

1

In meinem Fall wurde "Sept8" in einer mit R generierten CSV-Datei von Excel 2013 in "8-Sept" konvertiert. Das Problem wurde mithilfe der Funktion write.xlsx2 () im xlsx-Paket gelöst, um die Ausgabedatei im xlsx-Format zu generieren , die von Excel ohne unerwünschte Konvertierung geladen werden kann. Wenn Sie also eine CSV-Datei erhalten, können Sie versuchen, sie in R zu laden und mit der Funktion write.xlsx2 () in xlsx zu konvertieren.


Ich weiß nicht, warum Ihre Antwort abgelehnt wurde. Es ist zumindest für Leute nützlich, die R verwenden. Diese Antwort hat mir geholfen. Danke :)
sriharsha KB

1

Eine Problemumgehung mit Google Drive (oder Numbers, wenn Sie einen Mac verwenden):

  1. Öffnen Sie die Daten in Excel
  2. Stellen Sie das Format der Spalte mit falschen Daten auf Text ein (Format> Zellen> Nummer> Text).
  3. Laden Sie die CSV-Datei in Google Drive und öffnen Sie sie mit Google Sheets
  4. Kopieren Sie die fehlerhafte Spalte
  5. Spalte als Text in Excel einfügen (Bearbeiten> Spezial einfügen> Text)

Wenn Sie für Schritt 3 einen Mac verwenden, können Sie die Daten auch in Zahlen öffnen.


Dies ist eine vernünftige Lösung, anstatt stundenlang ohne Lösung daran zu arbeiten.
Imsrgadich

1

(EXCEL 2016 und höher, eigentlich habe ich es in älteren Versionen nicht versucht)

  1. Neue leere Seite öffnen
  2. Gehen Sie zur Registerkarte "Daten"
  3. Klicken Sie auf "Aus Text / CSV" und wählen Sie Ihre CSV-Datei aus
  4. Überprüfen Sie in der Vorschau, ob Ihre Daten korrekt sind.
  5. Wenn eine Spalte in ein Datum konvertiert wird, klicken Sie auf "Bearbeiten" und wählen Sie dann Text aus, indem Sie auf den Kalender im Kopf der Spalte klicken
  6. Klicken Sie auf "Schließen & Laden"

0

Okay, ich habe in Excel 2003 bis 2007 einen einfachen Weg gefunden, dies zu tun. Öffnen Sie eine leere XLS-Arbeitsmappe. Gehen Sie dann zum Menü Daten und importieren Sie externe Daten. Wählen Sie Ihre CSV-Datei. Gehen Sie durch den Assistenten und wählen Sie dann im "Spaltendatenformat" eine Spalte aus, die zu "Text" gezwungen werden muss. Dadurch wird die gesamte Spalte als Textformat importiert, sodass Excel nicht versucht, bestimmte Zellen als Datum zu behandeln.


0

Dieses Problem ist in Mac Office 2011 und Office 2013 immer noch vorhanden. Ich kann es nicht verhindern. Es scheint so eine grundlegende Sache.

In meinem Fall hatte ich Werte wie "1 - 2" und "7 - 12" in der CSV, die korrekt in Anführungszeichen eingeschlossen waren. Dies wird automatisch in ein Datum in Excel konvertiert, wenn Sie versuchen, es anschließend in einfachen Text zu konvertieren, den Sie erhalten würden eine Zahlendarstellung des Datums wie 43768. Außerdem werden große Zahlen in Barcodes und EAN-Nummern erneut in 123E + -Nummern formatiert, die nicht zurückkonvertiert werden können.

Ich habe festgestellt, dass Google Sheets von Google Drive die Zahlen nicht in Datumsangaben konvertiert. Die Barcodes enthalten alle 3 Zeichen Kommas, die jedoch leicht entfernt werden können. Es verarbeitet CSVs sehr gut, insbesondere im Umgang mit MAC / Windows-CSVs.

Könnte irgendwann jemanden retten.


0

EINFACHSTE LÖSUNG Ich habe das heute gerade herausgefunden.

  • In Word öffnen
  • Ersetzen Sie alle Bindestriche durch Bindestriche
  • Speichern und schließen
  • In Excel öffnen

Sobald Sie mit der Bearbeitung fertig sind, können Sie es jederzeit wieder in Word öffnen, um die Bindestriche wieder durch Bindestriche zu ersetzen.


0

Ich mache das für Kreditkartennummern, die immer wieder in wissenschaftliche Notation konvertiert werden: Am Ende importiere ich meine CSV-Datei in Google Sheets. Mit den Importoptionen kann jetzt die automatische Formatierung numerischer Werte deaktiviert werden. Ich setze alle sensiblen Spalten auf Nur Text und lade sie als xlsx herunter.

Es ist ein schrecklicher Workflow, aber zumindest bleiben meine Werte so, wie sie sein sollten.


Wenn Sie sich die Mühe machen, einige der anderen Antworten durchzulesen, werden Sie feststellen, dass hier bereits jemand dies vorgeschlagen hat .
Laurel

Ich habe mich die Mühe gemacht, danke. Ich weise darauf hin, dass die automatische Formatierungsauswahl ein neuer Teil des Importprozesses ist. Meine Antwort bietet einen sehr spezifischen Workflow für diejenigen, die wie ich gezwungen waren, Sheets zu verwenden, um dieses spezielle Problem zu lösen. In meinen Augen verdient dies eine gesonderte Antwort. Eine geringfügige Anpassung Ihres Tons kann tatsächlich dazu führen, dass Ihr Kommentar als hilfreich interpretiert wird. Dies ist der springende Punkt dieser Website-Familie.
Brendonwbrown

Sie können jedoch einfach den Textimport in Excel verwenden, um die CSV-Datei zu importieren, ohne sich um Blätter zu kümmern, wie in anderen Antworten angegeben.
NetMage

0

Ich habe dieses vba-Makro erstellt, das den Ausgabebereich vor dem Einfügen der Zahlen im Grunde genommen als Text formatiert. Funktioniert perfekt für mich, wenn ich Werte wie 8/11, 23/6, 1/3 usw. einfügen möchte, ohne dass Excel sie als Datumsangaben interpretiert.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Ich bin sehr daran interessiert zu wissen, ob dies auch für andere Menschen funktioniert. Ich habe eine Weile nach einer Lösung für dieses Problem gesucht, aber ich habe noch keine schnelle vba-Lösung dafür gefunden, bei der das Einfügen vor dem Eingabetext nicht enthalten war. Dieser Code behält die Daten in ihrer ursprünglichen Form bei.


-1

Wenn Sie am Anfang des Feldes ein Anführungszeichen setzen, wird es als Text interpretiert.

Beispiel: 25/12/2008 wird'25/12/2008

Sie können beim Importieren auch den Feldtyp auswählen.


9
Ich möchte kein 'am Anfang meiner Daten.

27
-1. Das Zeichen "Funktioniert nur, wenn es direkt in Excel eingegeben wird, funktioniert jedoch nicht in CSV - Sie haben nach dem Import ein zusätzliches Zeichen" in der Excel-Zelle.
TMS

-1

Eine alternative Methode:

Konvertieren Sie das Format der Spalte, die Sie ändern möchten, in "Text". Wählen Sie alle Zellen aus, die Sie beibehalten und kopieren möchten. Klicken Sie auf "Bearbeiten> Inhalte einfügen> Als Werte", ohne die Auswahl dieser Spalten aufzuheben.

Als CSV speichern. Beachten Sie, dass dies das letzte sein muss, was Sie mit der Datei tun, da sie sich beim erneuten Öffnen selbst als Datum formatiert, da Zellformate nicht in CSV-Dateien gespeichert werden können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.