Excel CSV - Format de cellule numérique

86

Je produis un rapport sous forme de fichier CSV. Lorsque j'essaie d'ouvrir le fichier dans Excel, il émet une hypothèse sur le type de données en fonction du contenu de la cellule et le reformate en conséquence.

Par exemple, si le fichier CSV contient

...,005,...

Puis Excel l'affiche comme 5. Existe-t-il un moyen de remplacer cela et d'afficher 005?

Je préférerais faire quelque chose sur le fichier lui-même, de sorte que l'utilisateur puisse simplement double-cliquer sur le fichier CSV pour l'ouvrir.

J'utilise Excel 2003.

Sergey Stadnik
la source
Voir cette question pour une solution macro à ce problème.
Adam Jensen
De nos jours, il existe de nombreuses bibliothèques d'écriture Excel. Il devrait être assez facile de créer des fichiers .xlsx dans la langue de votre choix. Si vos utilisateurs utilisent toujours Excel 2003 pour une raison quelconque (courante lorsque cette question a été posée à l'origine, mais, espérons-le, peu probable aujourd'hui), il existe également des options de production de .xls. Pour les personnes qui tombent sur cette question aujourd'hui, il est très probable que vous n'ayez pas à faire la vôtre.
John Y

Réponses:

129

Il n'existe pas de moyen simple de contrôler le formatage appliqué par Excel lors de l'ouverture d'un fichier .csv. Cependant, voici trois approches qui pourraient vous aider.

Ma préférence est la première option.

Option 1 - Modifier les données dans le fichier

Vous pouvez modifier les données du fichier .csv comme suit ..., = "005" , ... Cela sera affiché dans Excel sous la forme ..., 005 , ...

Excel aura conservé les données sous forme de formule, mais la copie de la colonne et l'utilisation de valeurs spéciales de collage supprimera la formule mais conservera la mise en forme

Option 2 - Formater les données

S'il s'agit simplement d'un problème de format et que toutes vos données dans cette colonne ont une longueur de trois chiffres. Ensuite, ouvrez les données dans Excel puis formatez la colonne contenant les données avec ce format personnalisé 000

Option 3 - Changez l'extension de fichier en .dif (format d'échange de données)

Modifiez l'extension de fichier et utilisez l'assistant d'importation de fichier pour contrôler les formats. Les fichiers avec une extension .dif sont automatiquement ouverts par Excel lorsque vous double-cliquez dessus.

Pas à pas:

  • Changez l'extension de fichier de .csv à .dif
  • Double-cliquez sur le fichier pour l'ouvrir dans Excel.
  • L '«Assistant d'importation de fichiers» sera lancé.
  • Réglez le «Type de fichier» sur «Délimité» et cliquez sur le bouton «Suivant».
  • Sous Délimiteurs, cochez «Virgule» et cliquez sur le bouton «Suivant».
  • Cliquez sur chaque colonne de vos données qui s'affiche et sélectionnez un 'Format de données de colonne'. La colonne avec la valeur «005» doit être formatée en «Texte».
  • Cliquez sur le bouton Terminer, le fichier sera ouvert par Excel avec les formats que vous avez spécifiés.
Robert Mearns
la source
8
.dif ne fonctionnait pas sur ma machine; l'ouverture manuelle avec Excel 2007 n'a pas fonctionné (m'a averti que le type de fichier était différent de l'extension) et il semble que .DIF est associé à Quicktime sur de nombreux ordinateurs. Juste pour info :) Sinon, de bons conseils!
Nicholas
15
Je pense que l'option 1 est la meilleure, si vous voulez un moyen sans tracas de générer un fichier qui "fonctionne simplement" - c'est-à-dire qu'il s'ouvre sur l'ordinateur de l'utilisateur dans Excel sans leur demander de faire un travail supplémentaire.
Kip
J'ai le même problème, et aucune des réponses ci-dessus n'est appropriée. Je pense que je pourrais exporter au format XML et utiliser XSLT pour aller au CSV. J'ai besoin du fichier CSV être correct pour qu'il puisse être importé dans une autre application
Matt
1
Veuillez noter que l'option 1 n'est pas toujours bonne, si vous avez une cellule de disons "1E02, quel que soit le texte" et que vous mettez ensuite un égal devant alors Excel imaginera que vous avez entré une formule. Tout d'abord, la formule sera fausse, mais ensuite et surtout, elle divisera votre texte en 2 cellules.
ghiscoding le
1
Merci pour l'option 1. Correction de mon problème de notation scientifique sans aucun travail supplémentaire.
NaN
28

N'utilisez pas CSV, utilisez SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Cela donne beaucoup plus de contrôle sur la mise en forme et Excel n'essaiera pas de deviner le type d'un champ en examinant le contenu. Cela semble un peu compliqué, mais vous pouvez vous en tirer en utilisant un très petit sous-ensemble.

Mark Ransom
la source
2
+1 L'écriture dans SYLK est simple à mettre en œuvre, je l'ai fait en tant que novice.
Matt H
1
Je ne connaissais pas ce format. Cela ressemble à quelque chose que je pourrais utiliser. +1 pour ça!
Buggabill le
+1 Il m'a fallu cinq minutes pour passer de CSV à SYLK. Mon format de sortie goto à partir de maintenant!
TheFish
@xamde, vous avez raison. Il est étrange qu'ils n'aient jamais étendu le format pour le prendre en charge, comme ils l'ont fait avec RTF.
Mark Ransom
WTF, ou ce que quelqu'un le recommanderait, je cite sur Wikipédia: "Microsoft ne publie pas de spécification SYLK."
sorin
14

Cela fonctionne pour Microsoft Office 2010, Excel Version 14

J'ai mal interprété la préférence du PO "de faire quelque chose sur le fichier lui-même". Je garde toujours ceci pour ceux qui veulent une solution pour formater l'importation directement

  1. Ouvrez un (nouveau) fichier vierge (Fichier -> Nouveau à partir du classeur)
  2. Ouvrez l'assistant d'importation (Données -> À partir du texte)
  3. Sélectionnez votre fichier .csv et importez
  4. Dans la boîte de dialogue, choisissez «Délimité», puis cliquez sur Suivant.
  5. Choisissez vos délimiteurs (décochez tout sauf "virgule"), choisissez vos qualificatifs de texte (probablement {Aucun}), cliquez sur Suivant
  6. Dans le champ Aperçu des données , sélectionnez la colonne que vous voulez être du texte. Il devrait mettre en évidence.
  7. Dans le champ Format des données de la colonne , sélectionnez «Texte».
  8. Cliquez sur terminé.

la source
expliqué avec des images: support.insight.ly/hc/en-us/articles/…
Yo Ludke
2

Vous pouvez simplement formater votre plage sous forme de texte.

Voici également un bel article sur les formats de nombres et comment vous pouvez les programmer.

Ólafur Waage
la source
Cela n'affectera que la façon dont la valeur est affichée. Vous devez le convertir en texte, soit avec une formule, soit pendant l'importation, avec l'une des nombreuses méthodes goven dans ce fil
leo
2

En fait, j'ai découvert que, au moins à partir d'Office 2003, vous pouvez enregistrer une feuille de calcul Excel sous forme de fichier XML. Ainsi, je peux produire un fichier XML et lorsque je double-clique dessus, il sera ouvert dans Excel. Il offre le même niveau de contrôle que SYLK, mais la syntaxe XML est plus intuitive.

Sergey Stadnik
la source
2

L'ajout d'un espace insécable dans la cellule pourrait aider. Par exemple: "firstvalue";"secondvalue";"005 ";"othervalue"

Cela force Excel à le traiter comme un texte et l'espace n'est pas visible. Sous Windows, vous pouvez ajouter un espace insécable en inclinant alt + 0160. Voir ici pour plus d'informations: http://en.wikipedia.org/wiki/Non-breaking_space

Essayé sur Excel 2010. J'espère que cela peut aider les personnes qui recherchent encore une solution tout à fait appropriée à ce problème.

Kloe2378231
la source
2

J'ai eu ce problème lors de l'exportation de données CSV à partir du code C #, et j'ai résolu ce problème en ajoutant au début les données nulles principales avec le caractère de tabulation \ t, de sorte que les données ont été interprétées comme du texte plutôt que comme des chiffres dans Excel (mais contrairement à l'ajout d'autres caractères, cela ne le serait pas) t être vu).

J'ai aimé l'approche = "001", mais cela ne permettrait pas aux données CSV exportées d'être réimportées à nouveau dans mon application C # sans supprimer toute cette mise en forme du fichier CSV d'importation (à la place, je réduirai simplement les données d'importation) .

Richard Pursehouse
la source
1

Je crois que lorsque vous importez le fichier, vous pouvez sélectionner le type de colonne. Faites-en du texte au lieu du nombre. Je n'ai pas d'exemplaire devant moi pour le moment pour vérifier.

Harley Holcombe
la source
1

Chargez csv dans oleDB et forcez tous les types de données déduits à la chaîne

J'ai posé la même question et y ai répondu avec le code.

En gros, lorsque le fichier csv est chargé, le pilote oledb fait des hypothèses, vous pouvez lui indiquer quelles hypothèses faire.

Mon code force cependant tous les types de données à se ficeler ... il est très facile de changer le schéma. pour mes besoins, j'ai utilisé un xslt pour obtenir ce que je voulais - mais j'analyse une grande variété de fichiers.

John Nicholas
la source
1

Je sais que c'est une vieille question, mais j'ai une solution qui n'est pas répertoriée ici.

Lorsque vous produisez le csv, ajoutez un espace après la virgule mais avant votre valeur, par exemple , 005,.

Cela a fonctionné pour empêcher le formatage automatique de la date dans Excel 2007 de toute façon.

plntxt
la source
2
Juste testé, ne semble pas fonctionner avec Excel 2007 et une colonne numérique. : - /
Norman H
1

La méthode de l'assistant d'importation de texte ne fonctionne PAS lorsque le fichier CSV importé comporte des sauts de ligne dans une cellule. Cette méthode gère ce scénario (au moins avec des données délimitées par des tabulations):

  1. Créer un nouveau fichier Excel
  2. Ctrl + A pour sélectionner toutes les cellules
  3. Dans la zone de liste déroulante Format de nombre, sélectionnez Texte
  4. Ouvrir le fichier délimité par des tabulations dans l'éditeur de texte
  5. Tout sélectionner, copier et coller dans Excel
Cornichons
la source
1

Ajoutez simplement 'avant le numéro dans le document CSV.

MNassar
la source
Cela n'a pas fonctionné dans Excel 2010 ('devient une partie du contenu de la cellule).
sancho.s ReinstateMonicaCellio
1

Cela m'a rendu fou toute la journée (car en effet vous ne pouvez pas contrôler les types de colonnes Excel avant d'ouvrir le fichier CSV), et cela a fonctionné pour moi, en utilisant VB.NET et Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function
Ellen
la source
0

Lors de l'ouverture d'un CSV, vous obtenez l'assistant d'importation de texte. À la dernière étape de l'assistant, vous devriez pouvoir importer la colonne spécifique sous forme de texte, conservant ainsi le préfixe «00». Après cela, vous pouvez formater la cellule comme vous le souhaitez.

J'ai essayé avec Excel 2007 et cela a semblé fonctionner.

marque
la source
1
Excel 2003 ne fait pas apparaître l'assistant.
Sergey Stadnik
0

Eh bien, Excel ne fait jamais apparaître l'assistant pour les fichiers CSV. Si vous le renommez en .txt, vous verrez l'assistant lorsque vous effectuez un fichier> Ouvrir dans Excel la prochaine fois.

Narayanan
la source
0

Mettez un guillemet simple avant le champ. Excel le traitera comme du texte, même s'il ressemble à un nombre.

...,`005,...

EDIT: C'est faux. L'astuce d'apostrophe ne fonctionne que lors de la saisie directe des données dans Excel. Lorsque vous l'utilisez dans un fichier CSV, l'apostrophe apparaît dans le champ, ce que vous ne souhaitez pas.

http://support.microsoft.com/kb/214233

JW.
la source
4
C'est quelque chose que les gens vont probablement essayer. Donc, savoir que cela ne fonctionnera pas est utile et permet de gagner du temps.
AndyM