13 votes

Comment empêcher Numbers d'altérer les chiffres lors de l'importation d'un CSV ?

Lorsque j'ouvre un fichier CSV dans Numbers, il convertit de manière "utile" les champs qu'il reconnaît comme numériques en supprimant les zéros en tête, en convertissant les éléments qu'il reconnaît comme des dates, etc.

Par exemple, vous tapez un code UPC dans une feuille de calcul Numbers. 005566778899 Numbers le convertira automatiquement en 5566778899 . Ce n'est pas ce que je voudrais...

Cependant, la façon dont I utiliser Numbers, j'ouvre des bases de données avec des milliers de codes CUP avec des zéros précédents. Certains d'entre eux contiennent également dates que Numbers va également reformater. En fait, je ne veux aucune de ces fonctionnalités, je veux qu'on laisse mon contenu tranquille.

Comment faire pour que Numbers laisse mes données intactes lorsque j'ouvre un fichier CSV ?

Convertir les champs en texte après l'importation n'aidera pas puisque les données ont déjà été manipulées...

7voto

Daniel Points 32917

Si un champ dans un fichier CSV commence par une apostrophe ( ' ), Excel et Numbers traiteront le champ comme du texte et ne le rendront pas avec un formatage numérique.

Vos fichiers CSV semblent essayer de forcer le rendu du texte en mettant les champs numériques entre guillemets, mais Numbers et Excel ne semblent pas comprendre que les nombres entre guillemets doivent être traités comme des chaînes de caractères. L'astuce semble être de modifier les fichiers CSV pour qu'ils utilisent l'astuce "commence par une apostrophe simple" plutôt que l'astuce "contenu entre guillemets" pour les champs numériques, mais de conserver les guillemets pour les champs de texte impliquant une ponctuation (y compris les virgules, les guillemets, les sauts de ligne, etc.)

Pour traiter vos fichiers CSV de cette manière, vous pouvez créer une application Automator.

Dans Automator, créez une nouvelle application.

Il aura une action unique : Exécuter le Shell script (en passant les entrées comme arguments). Voici le script :

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

Enregistrez l'application résultante sur votre bureau. Déposez tous les fichiers CSV que vous souhaitez utiliser dans Numbers sur l'icône de l'application, et ils seront convertis de manière à ce que Numbers conserve les chiffres des champs comme des nombres littéraux, sans les formater ni supprimer des informations.

Sauvegardez vos données avant d'essayer ; il est possible qu'une chaîne particulièrement bizarre dans un champ d'enregistrement puisse fausser les résultats.

enter image description here

0voto

Yon Points 804

Plus précisément, voici comment gérer zéros de tête . Je pense que votre question porte davantage sur le formatage des cellules que sur la correction automatique.

Comme cela a été mentionné, la fonction de correction automatique est un élément du système et doit être désactivée dans les préférences système.

0voto

Heath Raftery Points 425

Huzzah, merci à este et d'autres, il existe désormais une méthode qui présente les avantages suivants :

  • Fonctionne aussi bien dans Excel que dans Numbers
  • Peut être automatisé.
  • Est invisible dans les chiffres.
  • Produit des fichiers CSV sans impact de l'importation à l'exportation.

L'astuce consiste à ne pas faire précéder chaque champ d'une apostrophe ni à le placer entre guillemets, mais à le faire précéder de la mention =" et le suffixe avec " . À l'importation, Numbers traite le contenu du champ comme une chaîne de caractères et à l'exportation, il supprime le préfixe et le suffixe.

Voici un outil pratique qui pré-traite un fichier appelé my.csv :

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

Le premier sed met =" au début de chaque ligne, change chaque virgule en ",=" puis termine chaque ligne par " . Le deuxième sed puis supprime tous les champs vides, car Numbers s'étrangle avec eux. Enfin, il écrit un fichier appelé tmp.csv qui peut être doublement cliqué ou transmis à open pour l'importer dans Numbers.

En pratique, cela brouillera tous les champs contenant des virgules. Il serait peut-être préférable de n'envelopper que les champs qui commencent par des chiffres, mais vous devrez alors faire attention au début et à la fin de chaque ligne et à votre version des expressions régulières. Cela fonctionnera sous MacOS :

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

C'est-à-dire qu'il faut faire correspondre le début de la ligne ou une virgule, un chiffre, puis un nombre quelconque de caractères qui ne sont pas des virgules, puis la fin de la ligne ou une autre virgule. Remplacer par le même début et la même fin, mais avec le bit du milieu entouré de =" y " .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X