Wie verhindere ich, dass Numbers beim Importieren einer CSV-Nummer Zahlen entstellt?

12

Wenn ich eine CSV-Datei in Numbers öffne, konvertiert sie "hilfreich" Felder, die sie als numerisch erkennt, indem sie führende Nullen entfernt, Dinge konvertiert, die sie als Datumsangaben erkennt usw.

Angenommen , Sie geben einen UPC-Code in eine Zahlen-Tabelle 005566778899 ein . Numbers konvertiert diesen automatisch in 5566778899 . Das würde ich nicht wollen ...

Doch die Art und Weise ich Zahlen verwenden, ich öffne Datenbanken mit Tausenden von UPC - Codes mit vorangehenden Nullen. Einige von ihnen enthalten auch Daten, die Numbers ebenfalls neu formatieren. Grundsätzlich möchte ich keine dieser Funktionen, sondern möchte, dass meine Inhalte in Ruhe gelassen werden.

Wie kann ich Numbers dazu bringen, meine Daten beim Öffnen einer CSV-Datei intakt zu lassen?

Das Konvertieren der Felder in Text nach dem Import hilft nicht, da die Daten bereits mit ...

Henryaaron
quelle
Was meinst du mit "die Daten wurden bereits durcheinander gebracht"? Meinen Sie das Konvertieren in Text, nachdem die Datei geöffnet wurde?
Daniel
Beim Öffnen der Datei ändern sich sowohl Excel als auch Numbers um alle Ihre Daten. Was auch immer ich tun muss, ich muss es tun, bevor ich die Datei öffne.
Henryaaron
7 Jahre später scheint dies immer noch ein klaffendes Loch zu sein. Es ist problematisch, dass ein Roundtrip von csv -> Numbers -> csv Zellen verändert. Die führenden Nullen sind ein gutes Beispiel. Ein anderer ist der Prozentsatz (z. B. 20% werden 0,2). Eine andere ist die wissenschaftliche Notation (z. B. 1E-2 wird 0,01). Das Einschließen in doppelte Anführungszeichen hilft nicht, und das Präfixieren eines Apostrophs wird wörtlich interpretiert. Ich denke, die beste Option könnte sein, vor dem Import alles mit einem Apostroph zu versehen und alle anfänglichen Apostrophe nach dem Export
Heath Raftery

Antworten:

7

Wenn ein Feld in einer CSV-Datei mit einem Apostroph ( ') beginnt , behandeln sowohl Excel als auch Numbers das Feld als Text und rendern es nicht mit einer numerischen Formatierung.

Ihre CSV-Dateien scheinen zu versuchen, das Rendern von Text durch das Einschließen von Zahlenfeldern in doppelte Anführungszeichen zu erzwingen, aber Numbers und Excel scheinen nicht den Hinweis zu verstehen, dass doppelte Anführungszeichen als Zeichenfolgen behandelt werden sollten. Der Trick scheint darin zu bestehen, die CSV-Dateien so zu ändern, dass sie den Trick "beginnt mit einem einzelnen Apostroph" anstelle des Tricks "in doppelten Anführungszeichen enthalten" für numerische Felder verwenden, aber die doppelten Anführungszeichen für Textfelder mit Interpunktion (einschließlich Kommas) beibehalten. Anführungszeichen, Zeilenumbrüche usw.).

Um Ihre CSV-Dateien zu verarbeiten, können Sie eine Automator-Anwendung erstellen.

Erstellen Sie in Automator eine neue Anwendung.

Es wird eine einzige Aktion geben: Shell-Skript ausführen (Eingabe als Argumente übergeben). Hier ist das Skript:

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

Speichern Sie die resultierende Anwendung auf Ihrem Desktop. Löschen Sie alle CSV-Dateien, die Sie in Numbers verwenden möchten, auf dem Anwendungssymbol. Sie werden konvertiert, sodass Numbers die Zahlen in den Feldern als Literalzahlen beibehalten und nicht formatieren oder Informationen wegwerfen sollte.

Sichern Sie Ihre Daten, bevor Sie dies versuchen. Es ist möglich, dass eine besonders seltsam konstruierte Zeichenfolge in einem Datensatzfeld die Ergebnisse hier beeinträchtigt.

Geben Sie hier die Bildbeschreibung ein

Daniel
quelle
Damit diese Arbeit funktioniert, muss sie interagiert werden. Diese Diskussion sollte besser im Chat stattfinden
Daniel
0

Im Folgenden erfahren Sie, wie Sie mit führenden Nullen umgehen . Ich denke, bei Ihrer Frage geht es mehr um die Formatierung von Zellen als um die automatische Korrektur.

Wie bereits erwähnt, ist die Autokorrekturfunktion selbst ein Systemelement und muss in den Systemeinstellungen deaktiviert werden.

Adam Eberbach
quelle
Das Konvertieren der Zellen in dieses Format hilft nicht, da die Daten bereits mit ...
henryaaron
1
Ich hätte erwartet, dass die Nullen zurückkommen, wenn Sie die Zellen formatieren - wenn Numbers diese Nullen beim Import destruktiv entfernt, die wirklich scheiße wären. Möglicherweise müssen Sie Zellen vor dem Import formatieren.
Adam Eberbach
Das tut es definitiv.
Henryaaron
0

Huzzah, dank dieser und anderer Antworten gibt es jetzt eine Methode mit den folgenden Vorteilen:

  • Funktioniert sowohl in Excel als auch in Zahlen
  • Kann automatisiert werden.
  • Ist in Zahlen unsichtbar.
  • Erzeugt wirkungslose CSV-Dateien vom Import bis zum Export.

Der Trick besteht darin, nicht jedem Feld ein Apostroph voranzustellen oder in doppelte Anführungszeichen zu setzen, sondern ein Präfix mit ="und ein Suffix mit ". Beim Import behandelt Numbers den Feldinhalt als Zeichenfolge und beim Export werden Präfix und Suffix gelöscht.

Hier ist ein praktischer Einzeiler, der eine Datei mit dem Namen vorverarbeitet my.csv:

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

Das erste sedsetzt ="am Anfang jeder Zeile, ändert jedes Komma in ",="und beendet dann jede Zeile mit ". Der zweite entfernt seddann alle leeren Felder, weil Numbers daran erstickt. Schließlich wird eine Datei mit dem Namen geschrieben tmp.csv, die doppelt angeklickt oder übergeben werden kann open, um sie in Numbers zu importieren.

In der Praxis werden dadurch alle Felder mit Kommas beschädigt. Es ist vielleicht besser, nur die Felder zu umbrechen, die mit Zahlen beginnen, aber dann müssen Sie mit dem Anfang und Ende jeder Zeile und Ihrer Version der regulären Ausdrücke vorsichtig sein. Dies funktioniert unter macOS:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

Das heißt, passen Sie den Zeilenanfang oder ein Komma, eine Ziffer und dann eine beliebige Anzahl von Zeichen an, die keine Kommas sind, dann das Zeilenende oder ein anderes Komma. Ersetzen Sie durch den gleichen Anfang und das gleiche Ende, aber mit dem mittleren Bit, das in ="und eingewickelt ist ".

Heath Raftery
quelle