Question Empêche Excel de convertir automatiquement certaines valeurs de texte en dates


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

J'essaie d'écrire un fichier .csv à partir de mon application et l'une des valeurs arrive à ressembler assez à une date qu'Excel convertit automatiquement du texte à une 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.


422
2017-10-02 23:30


origine


Réponses:


J'ai trouvé que mettre un '=' avant les guillemets doubles accomplira ce que vous voulez. Cela force les données à être du texte.

par exemple. = "2008-10-03", = "plus de texte"

EDIT (selon d'autres messages): en raison de l Bogue d'Excel 2007 noté par Jeffiekins on devrait utiliser le solution proposée par Andrew: "=""2008-10-03"""


294
2017-10-02 23:33



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

Le problème n'est pas seulement avec Rendez-vous dans les champs de texte, mais quoi que ce soit numérique est également converti du texte en chiffres. Quelques exemples où cela pose problème:

  • Codes postaux / postaux
  • numéros de téléphone
  • numéros d'identification du gouvernement

qui parfois pouvez Commencez avec un ou plusieurs zéros (0), qui seront éliminés lors de la conversion en numérique. Ou la valeur contient des caractères qui peuvent être confondus avec des opérateurs mathématiques (comme dans les dates: /, -).

Deux cas que je peux penser à cela la solution "pré-= =", comme mentionné précédemment, pourrait ne pas être idéal est

  • où le fichier pourrait être importé dans un programme autre que MS Excel (la fonction de publipostage de MS Word vient à l'esprit),
  • où la lisibilité humaine pourrait être importante.

Mon hack de contourner ce problème

Si l'on pré / ajoute un caractère non numérique et / ou non daté dans la valeur, la valeur sera reconnue comme texte et non convertie. Un caractère non-impression serait bon car il ne modifiera pas la valeur affichée. Toutefois, l'ancien caractère espace (\ s, ASCII 32) ne fonctionne pas pour cela car il est tronqué par Excel et la valeur est quand même convertie. Mais il existe divers autres caractères d'espace d'impression et de non-impression qui fonctionneront bien. Le plus facile est cependant à ajouter (ajouter après) le caractère de tabulation simple (\ t, ASCII 9).

Avantages de cette approche:

  • Disponible à partir du clavier ou avec un code ASCII facile à mémoriser (9),
  • Ça ne dérange pas l'importation,
  • Normalement ne dérange pas les résultats de fusion et publipostage (en fonction de la disposition du modèle - mais normalement il ajoute juste un espace large à la fin d'une ligne). (S'il s'agit d'un problème, regardez d'autres caractères, par exemple l'espace de largeur nulle (ZWSP, Unicode U + 200B)
  • n'est pas un gros obstacle lors de la visualisation du fichier CSV dans le Bloc-notes (etc),
  • et pourrait être enlevé par trouver / remplacer dans Excel (ou Notepad etc).
  • Vous n'avez pas besoin de importer le CSV, mais peut simplement double-cliquer pour ouvrir le CSV dans Excel.

S'il y a une raison pour laquelle vous ne souhaitez pas utiliser l'onglet, recherchez dans une table Unicode une autre solution.

Une autre option

peut-être pour générer des fichiers XML, pour lesquels un certain format est également accepté pour l'importation par les versions plus récentes de MS Excel, et qui permet beaucoup plus d'options similaires au format .XLS, mais je n'ai pas d'expérience avec cela.

Il y a donc différentes options. Selon vos besoins / application, un peut être meilleur qu'un autre.


Une addition

Il faut dire que les versions plus récentes (2013+) de MS Excel n'ouvrent plus le fichier CSV au format tableur - un ralentisseur de plus dans son flux de travail rendant Excel moins utile ... Au moins, des instructions existent pour le contourner. Voir par exemple ce Stackoverflow: Comment afficher correctement les fichiers .csv dans Excel 2013? .


110
2018-02-27 08:16



En travaillant sur la solution de Jarod et le problème soulevé par Jeffiekins, vous pouvez modifier

"May 16, 2011"

à

"=""May 16, 2011"""

93
2018-05-16 21:48



J'ai eu un problème similaire et c'est 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 autre que ".csv", vous pouvez le nommer avec une extension ".txt", telle que "Myfile.txt" ou "Myfile.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 fournira un "Assistant 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 le qualificateur de texte si vous avez entouré vos valeurs par des guillemets

Dans la troisième page, sélectionnez chaque colonne individuellement et attribuez-lui 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 quelqu'un d'autre avec un problème similaire!


52
2018-02-21 05:06



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", mais place tout après la virgule dans le champ suivant, indépendamment des guillemets.

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

Cela peut signifier qu'il y a des champs qu'il est impossible de représenter exactement "correctement" dans Excel, mais maintenant je crois que personne n'est trop surpris.


27
2017-12-10 19:58



Lors de la création de la chaîne à écrire dans mon fichier CSV en C #, je devais la formater de la manière suivante:

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

15
2018-04-21 13:09



Dans Excel 2010, ouvrez une nouvelle feuille. Sur le ruban de données, cliquez sur "Obtenir des données externes à partir du texte". Sélectionnez votre fichier CSV puis cliquez sur "Ouvrir". Cliquez sur Suivant". Décochez "Tab", placez une coche à côté de "Virgule", puis cliquez sur "Suivant". Cliquez n'importe où sur la première colonne. Tout en maintenant la touche Maj enfoncée, faites glisser le curseur jusqu'à ce que vous puissiez cliquer dans la dernière colonne, puis relâchez la touche Maj. Cliquez sur le bouton radio "texte" puis sur "Terminer"

Toutes les colonnes seront importées sous forme de texte, comme dans le fichier CSV.


14
2018-02-06 21:15



Encore un problème dans la version de Microsoft Office 2016, plutôt inquiétant pour ceux d'entre nous qui travaillent avec des noms de gènes tels que MARC1, MARCH1, SEPT1, etc. La solution que j'ai trouvé la plus pratique après avoir généré un fichier ".csv" dans R, qui sera ensuite ouvert / partagé avec les utilisateurs d'Excel:

  1. Ouvrez le fichier CSV en tant que texte (bloc-notes)
  2. Copiez-le (ctrl + a, ctrl + c).
  3. Collez-le dans une nouvelle feuille Excel - il sera tout coller dans une colonne en tant que longues chaînes de texte.
  4. Choisissez / sélectionnez cette colonne.
  5. Aller à Données- "Texte aux colonnes ...", sur la fenêtre ouverte choisissez "délimité" (suivant). Vérifiez que "virgule" est marqué (le marquage indiquera déjà la séparation des données en colonnes ci-dessous) (suivant), dans cette fenêtre vous pouvez choisir la colonne que vous voulez et la marquer comme texte (au lieu de général) (Terminer).

HTH


13
2017-11-30 17:35



Voici la méthode simple que nous utilisons au travail ici lors de la génération du fichier csv en premier lieu, elle modifie un peu les valeurs afin qu'elle ne soit pas adaptée à toutes les applications:

Ajouter un espace à toutes les valeurs dans le csv

Cet espace sera supprimé par des nombres tels que "1", "2.3" et "-2.9e4" mais restera sur des dates comme "01/10/1993" et booléens comme "TRUE", les empêchant d'être convertis en types de données internes d'Excel.

Il évite également que les guillemets doubles soient zappés lors de la lecture, de sorte qu'une manière infaillible de rendre le texte dans un csv reste inchangée par Excel EVEN IF est un texte comme "3.1415" pour l'entourer c'est-à-dire (en utilisant des guillemets simples pour montrer ce que vous tapez) '"3.1415"'. Ensuite, dans excel, vous avez toujours la chaîne originale, sauf qu'elle est entourée de guillemets doubles et précédée d'un espace. Vous devez donc tenir compte de celles des formules, etc.


9
2018-01-28 18:05



(En supposant Excel 2003 ...)

Lors de l'utilisation de l'Assistant Texte-à-Colonnes, à l'étape 3, vous pouvez dicter le type de données pour chacune des colonnes. Cliquez sur la colonne dans l'aperçu et remplacez la colonne "Mauvais" par "Texte".


7
2017-10-02 23:34



Ceci est une seule façon pour moi de savoir comment accomplir cela sans déconner le fichier lui-même. Comme d'habitude avec Excel, j'ai appris cela en me tapant la tête sur le bureau pendant des heures.

Changez l'extension de fichier .csv en .txt; Cela empêchera Excel de convertir automatiquement le fichier lorsqu'il sera ouvert. Voici comment je le fais: ouvrez Excel dans une feuille de calcul vierge, fermez la feuille vierge, puis Fichier => Ouvrir et choisissez votre fichier avec l'extension .txt. Cela force Excel à ouvrir le "Assistant d'importation de texte" où il vous posera des questions sur la façon dont vous voulez interpréter le fichier. D'abord, vous choisissez votre délimiteur (virgule, tabulation, etc ...), puis (ici la partie importante) vous choisissez un ensemble de colonnes de colonnes et sélectionnez le formatage. Si vous voulez exactement ce qu'il y a dans le fichier, choisissez "Texte" et Excel affichera juste ce qu'il y a entre les délimiteurs.


7
2017-08-27 15:08