web-dev-qa-db-fra.com

Excel CSV - Format de cellule numérique

Je produis un rapport sous forme de fichier CSV. Lorsque j'essaie d'ouvrir le fichier dans Excel, il suppose 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,...

Ensuite, Excel affiche le chiffre 5. Y a-t-il un moyen de le remplacer et d’afficher 005?

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

J'utilise Excel 2003.

83
Sergey Stadnik

Il n’est pas facile de contrôler le formatage appliqué par Excel lors de l’ouverture d’un fichier .csv. Cependant, voici trois approches qui pourraient aider.

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

Option 1 - Modifier les données du fichier

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

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 suppriment la formule mais conservent la mise en forme.

Option 2 - Formatez 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. Puis ouvrez les données dans Excel, puis formatez la colonne contenant les données avec ce format personnalisé

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

Modifiez l'extension du 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:

  • Modifiez l'extension du fichier de . CSV à . Dif
  • Double-cliquez sur le fichier pour l'ouvrir dans Excel.
  • L'assistant d'importation de fichier sera lancé.
  • Définissez le "Type de fichier" sur "Délimité" et cliquez sur le bouton "Suivant".
  • Sous Délimiteurs, cochez la case "Virgule" et cliquez sur le bouton "Suivant".
  • Cliquez sur chaque colonne de vos données affichée et sélectionnez un "Format de données de colonne". La colonne avec la valeur '005' doit être formatée en tant que 'Texte'.
  • Cliquez sur le bouton d'arrivée, le fichier sera ouvert par Excel avec les formats que vous avez spécifiés.
121
Robert Mearns

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

Cela donne beaucoup plus de contrôle sur le formatage, et Excel n'essayera 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.

27
Mark Ransom

Ceci fonctionne pour Microsoft Office 2010, Excel Version 14

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

  1. Ouvrir un fichier vierge (nouveau) (Fichier -> Nouveau à partir du classeur)
  2. Ouvrez le fichier d'importation Wizard (Données -> à partir du texte)
  3. Sélectionnez votre fichier .csv et importez
  4. Dans la boîte de dialogue, choisissez "Délimité" et cliquez sur Suivant.
  5. Choisissez vos délimiteurs (décochez tout sauf la virgule), choisissez vos qualificateurs de texte (vraisemblablement {Aucun}), cliquez sur Suivant.
  6. Dans le champ Aperçu des données, sélectionnez la colonne que vous souhaitez convertir en texte. Il faut mettre en évidence.
  7. Dans le champ Format des données de colonne, sélectionnez "Texte".
  8. Cliquez fini.
14
user288926

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

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

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

2
Kloe2378231

En fait, j'ai découvert que, du 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.

2
Sergey Stadnik

Vous pouvez simplement formater votre plage en tant que texte.

Aussi ici est un article de Nice sur les formats de nombres et leur programmation.

2
Ólafur Waage

J'avais ce problème lors de l'exportation de données CSV à partir de code C # et je l'ai résolu en ajoutant des caractères de tabulation au caractère de tabulation\t, de sorte que les données étaient interprétées sous forme de texte plutôt que numérique dans Excel. t être vu).

J'ai bien aimé l'approche = "001", mais cela ne permettrait pas de réimporter à nouveau les données CSV exportées dans mon application C # sans supprimer toute cette mise en forme du fichier CSV d'importation (au lieu de cela, je vais simplement couper les données d'importation). .

2
Richard Pursehouse

La méthode Text Import Wizard 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 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
1
Pickles

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

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

Cela a quand même empêché le formatage automatique de la date dans Excel 2007.

1
plntxt

Je crois que lorsque vous importez le fichier, vous pouvez sélectionner le type de colonne. Faites-le texte au lieu de nombre. Je n'ai pas de copie devant moi pour l'instant pour vérifier si.

1
Harley Holcombe

chargez csv dans oleDB et forcez tous les types de données inférés à chaîne

j'ai posé la même question, puis j'ai répondu avec du code.

lorsque le fichier csv est chargé, le pilote oledb émet des hypothèses, vous pouvez indiquer les hypothèses à faire.

Mon code force tous les types de données à string, cependant ... il est très facile de changer le schéma. Pour mes besoins, j'ai utilisé un xslt pour obtenir le ti que je voulais - mais je suis en train d'analyser une grande variété de fichiers.

1
John Nicholas

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 avec 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
1
Ellen

Eh bien, Excel n’affiche jamais l’assistant pour les fichiers CSV. Si vous le renommez en .txt, l'assistant s'affiche lors de la prochaine opération Fichier> Ouvrir dans Excel.

0
Narayanan

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

...,`005,...

EDIT: Ceci est faux. L'astuce apostrophe ne fonctionne que lors de la saisie de données directement 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/2142

0
JW.

Lorsque vous ouvrez un fichier 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, en conservant ainsi le préfixe '00'. Ensuite, vous pouvez formater la cellule comme vous le souhaitez.

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

0
Mark

Ajoutez simplement 'avant le numéro dans la doc CSV.

0
MNassar