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 une date?
J'essaie d'écrire un fichier .csv à partir de mon application et l'une des valeurs ressemble suffisamment à une date pour qu'Excel le convertisse automatiquement du texte en date. J'ai essayé de mettre tous mes champs de texte (y compris celui qui ressemble à une date) entre guillemets doubles, mais cela n'a aucun effet.
Réponses:
J'ai trouvé que mettre un «=» avant les guillemets doubles accomplira ce que vous voulez. Il force les données à être du texte.
par exemple. = "2008-10-03", = "plus de texte"
EDIT (selon d'autres articles) : en raison du bogue Excel 2007 noté par Jeffiekins, on devrait utiliser la solution proposée par Andrew :
"=""2008-10-03"""
la source
"=""2008-10-03"""
. Mis à jour le message.Je sais que c'est une vieille question, mais le problème ne disparaîtra pas de sitôt. 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 brut et omniprésents.
Le problème n'est pas seulement avec les dates dans les champs de texte, mais tout ce qui est numérique est également converti du texte en nombres. Quelques exemples où cela pose problème:
qui peut parfois commencer par un ou plusieurs zéros (0), qui sont jeté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 auxquels je peux penser que la solution "prepending =", comme mentionné précédemment, pourrait ne pas être idéal est
Mon hack pour contourner cela
Si l'on pré / ajoute un caractère non numérique et / ou non date dans la valeur, la valeur sera reconnue comme texte et non convertie. Un caractère non imprimable serait bien car il ne modifiera pas la valeur affichée. Cependant, l'ancien caractère d'espace simple (\ s, ASCII 32) ne fonctionne pas pour cela car il est coupé par Excel, puis la valeur est toujours convertie. Mais il existe divers autres caractères d'espace d'impression et de non-impression qui fonctionneront bien. Le plus simple est cependant d' ajouter (ajouter après) le caractère de tabulation simple (\ t, ASCII 9).
Avantages de cette approche:
S'il y a une raison pour laquelle vous ne souhaitez pas utiliser l'onglet, recherchez dans une table Unicode autre chose appropriée.
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 permet beaucoup plus d'options similaires au format .XLS, mais je n'ai pas d'expérience avec cela.
Il existe donc différentes options. Selon vos besoins / application, l'un peut être meilleur qu'un autre.
Une addition
Il faut dire que les nouvelles versions (2013+) de MS Excel n'ouvrent plus le CSV au format tableur - un ralentissement 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? .
la source
\t
à mon caractère de séparation;
... bon sang MS Office, pourquoi cela m'a-t-il fallu plus de 2 minutes pour comprendre?column_name
). A également fait l'affaire. Merci!'
, car c'est un peu bien compris et pas trop distrayant ... mais un invisible serait mieux.En travaillant sur la solution de Jarod et le problème soulevé par Jeffiekins, vous pouvez modifier
à
la source
"
valeurs n'importe où entre la date."806676","None","41","=""05-16-2011""","100.00","False"
place et vous verrez une sauvegarde et un rechargement perd le texte coupé.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 autrement que ".csv", vous pouvez le nommer avec une extension ".txt", comme "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 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 qualificatif de texte si vous avez entouré vos valeurs de guillemets
Dans la troisième page, sélectionnez chaque colonne individuellement et attribuez à chacun le type "Texte" au lieu de "Général" pour empêcher Excel de jouer avec vos données.
J'espère que cela vous aidera, vous ou quelqu'un avec un problème similaire!
la source
AVERTISSEMENT: Excel '07 (au moins) a un bogue (autre): s'il y a une virgule dans le contenu d'un champ, il n'analyse pas correctement le = "champ, contenu", mais place plutôt tout après la virgule dans le champ suivant, quels que soient les guillemets.
La seule solution de contournement que j'ai trouvée qui fonctionne est d'éliminer le = lorsque le contenu du champ comprend une virgule.
Cela peut signifier qu'il y a certains champs qui sont impossibles à représenter exactement "à droite" dans Excel, mais à ce jour, j'espère que personne n'est trop surpris.
la source
field, content
a"
. Par exemple"=""field, co""ntent"""
""""
.1"2
, si vous choisissez d'utiliser cette astuce (au lieu de simplement la laisser comme"1""2"
dans le fichier - Excel aurait déjà été traité comme du texte), la dernière chaîne correcte dans le fichier CSV de ciblage Excel finit être"=""1""""2"""
.Lors de la création de la chaîne à écrire dans mon fichier CSV en C #, j'ai dû la formater de cette façon:
la source
2018
La seule bonne solution qui a fonctionné pour moi (et aussi sans modifier le CSV ).
Excel 2010:
Excel office365: (version client)
Remarque: Excel office365 (version Web), au moment où j'écris ceci, vous ne pourrez pas le faire.
la source
Dans Excel 2010, ouvrez une nouvelle feuille. Dans le ruban Données, cliquez sur "Extraire les données externes du texte". Sélectionnez votre fichier CSV puis cliquez sur "Ouvrir". Cliquez sur Suivant". Décochez "Tab", cochez la case à 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 cliquez sur "Terminer"
Toutes les colonnes seront importées sous forme de texte, tout comme elles l'étaient dans le fichier CSV.
la source
Toujours un problème dans la version Microsoft Office 2016, plutôt dérangeant 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ée la plus pratique après avoir généré un fichier ".csv" dans R, qui sera ensuite ouvert / partagé avec les utilisateurs d'Excel:
HTH
la source
Voici la méthode simple que nous utilisons ici lors de la génération du fichier csv, elle modifie un peu les valeurs, elle n'est donc pas adaptée à toutes les applications:
Ajouter un espace à toutes les valeurs dans le csv
Cet espace sera supprimé par Excel de nombres tels que "1", "2.3" et "-2.9e4", mais restera à des dates comme "01/10/1993" et des booléens comme "TRUE", en empêchant leur conversion en les types de données internes d'Excel.
Cela empêche également les guillemets doubles d'être zappés lors de la lecture, donc une façon infaillible de faire en sorte que le texte dans un csv reste inchangé par Excel MÊME SI un texte comme "3.1415" est de l'entourer de guillemets doubles ET d'ajouter la chaîne entière avec un espace, 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 d'origine, sauf qu'elle est entourée de guillemets doubles et précédée d'un espace, vous devez donc en tenir compte dans toutes les formules, etc.
la source
"\xA0"
place - cela fonctionnera.(En supposant qu'Excel 2003 ...)
Lorsque vous utilisez l'assistant de conversion de texte en 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 modifiez la colonne de mauvais comportement de «Général» à «Texte».
la source
C'est la seule façon pour moi de le faire sans gâcher le fichier lui-même. Comme d'habitude avec Excel, j'ai appris cela en me frappant la tête sur le bureau pendant des heures.
Modifiez l'extension de fichier .csv en .txt; cela empêchera Excel de convertir automatiquement le fichier lorsqu'il est 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 l '"Assistant d'importation de texte" où il vous posera des questions sur la façon dont vous souhaitez qu'il interprète le fichier. Vous choisissez d'abord votre délimiteur (virgule, tabulation, etc ...), puis (voici la partie importante) vous choisissez un ensemble de colonnes de colonnes et sélectionnez la mise en forme. Si vous voulez exactement ce qu'il y a dans le fichier, choisissez "Texte" et Excel affichera exactement ce qu'il y a entre les délimiteurs.
la source
awk
- évitez de reformater les valeurs de type date , où le problème est plutôt avec Excel queawk
, malgré le titre de la question.(EXCEL 2007 et versions ultérieures)
Comment forcer Excel à ne pas "détecter" les formats de date sans modifier le fichier source
Soit:
Data > Get external data > From Text
et sélectionnez votre CSV.
Quoi qu'il en soit, vous serez présenté avec des options d'importation, sélectionnez simplement chaque colonne contenant les dates et dites à Excel de formater comme "texte" et non "général".
la source
Ce que j'ai fait pour ce même problème était d'ajouter les éléments suivants avant chaque valeur csv: "=" "" et un guillemet double après chaque valeur CSV, avant d'ouvrir le fichier dans Excel. Prenez par exemple les valeurs suivantes:
Ceux-ci doivent être modifiés avant l'ouverture dans Excel pour:
Après cela, chaque valeur de cellule apparaît sous forme de formule dans Excel et ne sera donc pas formatée sous forme de nombre, de date, etc. Par exemple, une valeur de 012345 apparaît comme:
la source
1234500198475E-8
; De cette façon, d'autres calculs dans Excel seront toujours possibles.Aucune des solutions proposées ici n'est une bonne solution. Cela peut fonctionner pour des cas individuels, mais uniquement si vous contrôlez l'affichage final. Prenons mon exemple: mon travail produit une liste de produits qu'ils vendent au détail. Ceci est au format CSV et contient des codes pièce, certains d'entre eux commencent par des zéro, définis par les fabricants (non sous notre contrôle). Supprimez les zéros de tête et vous pouvez en fait correspondre à un autre produit. Les clients au détail veulent la liste au format CSV en raison de programmes de traitement back-end, qui sont également hors de notre contrôle et différents par client, nous ne pouvons donc pas changer le format des fichiers CSV. Pas de "=" préfixé, ni d'onglets ajoutés. Les données dans les fichiers CSV bruts sont correctes; c'est lorsque les clients ouvrent ces fichiers dans Excel que les problèmes commencent. Et de nombreux clients ne sont pas vraiment avertis en informatique. Ils peuvent à peu près ouvrir et enregistrer une pièce jointe. Nous envisageons de fournir les données dans deux formats légèrement différents: l'un en tant qu'Excel Friendly (en utilisant les options suggérées ci-dessus en ajoutant un TAB, l'autre en tant que «maître». Mais cela peut être un vœu pieux car certains clients ne comprendront pas pourquoi nous devons le faire. Pendant ce temps, nous continuons d'expliquer pourquoi ils voient parfois de «mauvaises» données dans leurs feuilles de calcul. Jusqu'à ce que Microsoft apporte un changement approprié, je ne vois aucune résolution appropriée à cela, tant que l'on n'a aucun contrôle sur la façon dont les utilisateurs finaux utilisez les fichiers. Mais cela peut être un vœu pieux car certains clients ne comprendront pas pourquoi nous devons le faire. Pendant ce temps, nous continuons d'expliquer pourquoi ils voient parfois de «mauvaises» données dans leurs feuilles de calcul. Jusqu'à ce que Microsoft apporte une modification appropriée, je ne vois aucune résolution appropriée à cela, tant que l'on n'a aucun contrôle sur la façon dont les utilisateurs finaux utilisent les fichiers. Mais cela peut être un vœu pieux car certains clients ne comprendront pas pourquoi nous devons le faire. Pendant ce temps, nous continuons d'expliquer pourquoi ils voient parfois de «mauvaises» données dans leurs feuilles de calcul. Jusqu'à ce que Microsoft apporte une modification appropriée, je ne vois aucune résolution appropriée à cela, tant que l'on n'a aucun contrôle sur la façon dont les utilisateurs finaux utilisent les fichiers.
la source
"\xA0"
(espace insécable) à vos données.J'ai rencontré cette semaine cette convention, qui semble être une excellente approche, mais je ne la trouve nulle part référencée. Quelqu'un le connaît-il? Pouvez-vous citer une source pour cela? Je n'ai pas cherché des heures et des heures mais j'espère que quelqu'un reconnaîtra cette approche.
Exemple 1: = ("012345678905") s'affiche comme 012345678905
Exemple 2: = ("1954-12-12") s'affiche comme 1954-12-12 , pas 12/12/1954 .
la source
Ce n'est pas Excel. Windows reconnaît la formule, les données comme une date et les corrections automatiques. Vous devez modifier les paramètres de Windows.
"Panneau de configuration" (-> "Passer à l'affichage classique") -> "Options régionales et linguistiques" -> onglet "Options régionales" -> "Personnaliser ..." -> onglet "Numéros" -> Et puis modifier les symboles selon ce que vous voulez.
http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html
Cela fonctionnera sur votre ordinateur, si ces paramètres ne sont pas modifiés par exemple sur l'ordinateur de vos clients, ils verront les dates au lieu des données.
la source
Salut, j'ai le même problème,
J'écris ce vbscipt pour créer un autre fichier CSV. Le nouveau fichier CSV aura un espace dans la police de chaque champ, donc Excel le comprendra comme du texte.
Vous créez donc un fichier .vbs avec le code ci-dessous (par exemple Modify_CSV.vbs), l'enregistrez et le fermez. Faites glisser et déposez votre fichier d'origine dans votre fichier vbscript. Il créera un nouveau fichier avec "SPACE_ADDED" au nom du fichier au même emplacement.
la source
Sans modifier votre fichier csv, vous pouvez:
Excel formatera et séparera correctement vos cellules csv sous forme de texte en ignorant les formats de date automatique.
Une sorte de travail idiot, mais il vaut mieux modifier les données csv avant l'importation. Andy Baird et Richard ont en quelque sorte éludé cette méthode, mais ont raté quelques étapes importantes.
la source
Je sais que c'est un vieux fil. Pour ceux comme moi, qui ont toujours ce problème en utilisant Office 2013 via l'objet powershell com, ils peuvent utiliser la méthode opentext . Le problème est que cette méthode a de nombreux arguments, qui sont parfois mutuellement exclusifs. Pour résoudre ce problème, vous pouvez utiliser la méthode invoke-namedparameter présentée dans cet article . Un exemple serait
Malheureusement, je viens de découvrir que cette méthode rompt en quelque sorte l'analyse csv lorsque les cellules contiennent des sauts de ligne. Ceci est supporté par csv mais l'implémentation des microsofts semble être buggée. De plus, il n'a pas détecté les caractères spécifiques à l'allemand. Le fait de lui donner la bonne culture n'a pas changé ce comportement. Tous les fichiers (csv et script) sont enregistrés avec l'encodage utf8. J'ai d'abord écrit le code suivant pour insérer la cellule csv cellule par cellule.
Mais c'est extrêmement lent, c'est pourquoi j'ai cherché une alternative. Apparemment, Excel vous permet de définir les valeurs d'une plage de cellules avec une matrice. J'ai donc utilisé l'algorithme de ce blog pour transformer le csv en multiarray.
Vous pouvez utiliser le code ci-dessus tel qu'il devrait convertir tous les fichiers CSV en Excel. Modifiez simplement le chemin vers le csv et le caractère de délimitation en bas.
la source
Dans mon cas, "Sept8" dans un fichier csv généré à l'aide de R a été converti en "8-sept" par Excel 2013. Le problème a été résolu en utilisant la fonction write.xlsx2 () dans le package xlsx pour générer le fichier de sortie au format xlsx , qui peut être chargé par Excel sans conversion indésirable. Donc, si vous recevez un fichier csv, vous pouvez essayer de le charger dans R et de le convertir en xlsx en utilisant la fonction write.xlsx2 ().
la source
Une solution de contournement en utilisant Google Drive (ou Numbers si vous êtes sur un Mac):
Alternativement, si vous êtes sur un Mac pour l'étape 3, vous pouvez ouvrir les données dans Numbers.
la source
(EXCEL 2016 et versions ultérieures, en fait, je n'ai pas essayé dans les anciennes versions)
la source
OK a trouvé un moyen simple de le faire dans Excel 2003 à 2007. Ouvrez un classeur xls vierge. Ensuite, allez dans le menu Données, importez des données externes. Sélectionnez votre fichier csv. Parcourez l'assistant, puis dans "format de données de colonne", sélectionnez n'importe quelle colonne qui doit être forcée à "texte". Cela importera cette colonne entière sous forme de texte empêchant Excel d'essayer de traiter des cellules spécifiques comme une date.
la source
Ce problème est toujours présent dans Mac Office 2011 et Office 2013, je ne peux pas l'empêcher de se produire. Cela semble une chose tellement fondamentale.
Dans mon cas, j'avais des valeurs telles que "1 - 2" et "7 - 12" dans le CSV correctement enfermé entre des virgules inversées, cela se convertit automatiquement en une date dans Excel, si vous essayez ensuite de le convertir en texte simple, vous obtiendrez une représentation numérique de la date telle que 43768. De plus, il reformate les grands nombres trouvés dans les codes-barres et les numéros EAN en nombres 123E + qui ne peuvent pas être reconvertis.
J'ai constaté que Google Sheets de Google Drive ne convertit pas les nombres en dates. Les codes-barres contiennent des virgules tous les 3 caractères, mais ils sont facilement supprimés. Il gère très bien les CSV, en particulier lorsqu'il s'agit de CSV MAC / Windows.
Pourrait sauver quelqu'un un jour.
la source
SOLUTION LA PLUS FACILE Je viens de comprendre cela aujourd'hui.
Une fois la modification terminée, vous pouvez toujours l'ouvrir à nouveau dans Word pour remplacer à nouveau les tirets en par des tirets.
la source
Je fais cela pour les numéros de carte de crédit qui continuent de se convertir en notation scientifique: je finis par importer mon .csv dans Google Sheets. Les options d'importation permettent désormais de désactiver le formatage automatique des valeurs numériques. Je mets toutes les colonnes sensibles en texte brut et télécharge au format xlsx.
C'est un flux de travail terrible, mais au moins mes valeurs restent telles qu'elles devraient être.
la source
J'ai fait cette macro vba qui formate essentiellement la plage de sortie sous forme de texte avant de coller les nombres. Fonctionne parfaitement pour moi lorsque je veux coller des valeurs telles que 8/11, 23/6, 1/3, etc. sans qu'Excel les interprète comme des dates.
Je suis très intéressé de savoir si cela fonctionne aussi pour d'autres personnes. Je cherchais une solution à ce problème depuis un certain temps, mais je n'ai jamais vu de solution vba rapide qui n'incluait pas l'insertion 'devant le texte d'entrée. Ce code conserve les données dans leur forme d'origine.
la source
Si vous mettez une virgule inversée au début du champ, elle sera interprétée comme du texte.
Exemple:
25/12/2008
devient'25/12/2008
Vous pouvez également sélectionner le type de champ lors de l'importation.
la source
Une autre méthode:
Convertissez le format de la colonne que vous souhaitez modifier en «Texte». Sélectionnez toutes les cellules que vous souhaitez conserver, copiez. Sans désélectionner ces colonnes, cliquez sur "Edition> Collage spécial> Comme valeurs"
Enregistrez au format CSV. Notez que cela doit être la dernière chose que vous faites au fichier, car lorsque vous le rouvrez, il se formatera en tant que dates car les formats de cellule ne peuvent pas être enregistrés dans des fichiers CSV.
la source