615 votes

Empêcher Excel de convertir automatiquement certaines valeurs de texte en dates

Est-ce que quelqu'un sait s'il existe un jeton que je peux ajouter à mon csv pour un certain champ afin qu'Excel n'essaie pas de le convertir en date ?

J'essaie d'écrire un fichier .csv à partir de mon application et l'une des valeurs ressemble suffisamment à une date pour qu'Excel la convertisse automatiquement de texte en date. J'ai essayé de mettre tous mes champs de texte (y compris celui qui ressemble à une date) entre guillemets, mais cela n'a aucun effet.

393voto

Jarod Elliott Points 7124

J'ai découvert que le fait de mettre un '=' avant les guillemets doubles permet d'obtenir ce que vous voulez. Cela force les données à être du texte.

ex. ="2008-10-03",="plus de texte".

EDIT (selon d'autres messages) en raison de la Bug d'Excel 2007 noté par Jeffiekins il faut utiliser le solution proposée par Andrew : "=""2008-10-03"""

180voto

fr13d Points 259

Je sais que c'est une vieille question, mais le problème n'est pas prêt de disparaître. Les fichiers CSV sont faciles à générer à partir de la plupart des langages de programmation, plutôt petits, lisibles par l'homme avec un éditeur de texte simple, et omniprésents.

Le problème ne concerne pas seulement les dates dans les champs de texte, mais tout ce qui est numérique est également converti du texte en chiffres. Par exemple, les codes postaux, les numéros de téléphone et les numéros d'identification gouvernementaux posent problème. peut commencent par un ou plusieurs zéros (0), qui sont rejetés lors de la conversion en numérique.

Il y a deux cas où la solution "ajouter =", telle que mentionnée précédemment, n'est pas idéale : lorsque le fichier est importé dans un programme autre que MS Excel (on pense à MS Word Mail Merge) ou lorsque la lisibilité humaine est importante.

Ce que j'ai découvert, c'est que si l'on ajoute au préalable un caractère non numérique et/ou non daté dans la valeur, celle-ci sera reconnue comme du texte et ne sera pas convertie. Cependant, le bon vieux caractère espace ne fonctionne pas dans ce cas, car il est coupé par Excel et la valeur est quand même convertie. Mais il existe d'autres caractères d'espace, imprimables ou non, qui fonctionnent bien. Le plus simple est cependant d'ajouter après le simple caractère de tabulation ( \t ASCII 9). Cela ne gêne pas l'importation, n'affecte normalement pas les résultats de la fusion postale, n'est pas un gros obstacle lors de l'affichage du CSV dans le Bloc-notes, et peut être supprimé par recherche/remplacement dans Excel. Vous n'avez pas besoin d'importer le CSV, mais pouvez simplement double-cliquer pour l'ouvrir.

Une autre option pourrait être de générer des fichiers XML, pour lesquels un certain format est également accepté pour l'importation par les nouvelles versions de MS Excel, et qui permettent beaucoup plus d'options similaires au format .XLS, mais je n'ai pas d'expérience dans ce domaine.

Il existe donc plusieurs options. En fonction de vos besoins/applications, l'une d'entre elles peut être meilleure qu'une autre.

107voto

Andrew Ferk Points 833

En s'inspirant de la solution de Jarod et de la question soulevée par Jeffiekins, vous pourriez modifier les éléments suivants

"May 16, 2011"

à

"=""May 16, 2011"""

71voto

rainerbit Points 41

J'ai eu un problème similaire et voici la solution de contournement qui m'a aidé sans avoir à modifier le contenu du fichier csv :

Si vous avez la possibilité de nommer le fichier autrement que ".csv", vous pouvez le nommer avec une extension ".txt", comme "Monfichier.txt" ou "Monfichier.csv.txt". Ensuite, lorsque vous l'ouvrez dans Excel (pas par glisser-déposer, mais en utilisant Fichier->Ouvrir ou la liste des fichiers les plus récemment utilisés), Excel vous propose un "Assistant d'importation de texte".

Dans la première page de l'assistant, choisissez "Délimité" pour le type de fichier.

Dans la deuxième page de l'assistant, choisissez "," comme délimiteur et choisissez également le qualificateur de texte si vous avez entouré vos valeurs de guillemets.

Dans la troisième page, sélectionnez chaque colonne individuellement et attribuez à chacune le type "Texte" au lieu de "Général" pour empêcher Excel de manipuler vos données.

J'espère que cela vous aidera ou aidera quelqu'un ayant un problème similaire !

29voto

Jeffiekins Points 310

ATTENTION : Excel '07 (au moins) a un (autre) bug : s'il y a une virgule dans le contenu d'un champ, il n'analyse pas correctement le ="champ, contenu", mais met tout ce qui suit la virgule dans le champ suivant, sans tenir compte des guillemets.

La seule solution de contournement que j'ai trouvée et qui fonctionne est d'éliminer le = lorsque le contenu du champ comprend une virgule.

Cela peut signifier que certains champs sont impossibles à représenter exactement "correctement" dans Excel, mais je pense que personne n'est trop surpris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X