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.
excel
csv
formatting
number-formatting
Sergey Stadnik
la source
la source
Réponses:
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:
la source
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.
la source
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
la source
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.
la source
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.
la source
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.
la source
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) .
la source
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.
la source
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.
la source
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.
la source
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):
la source
Ajoutez simplement 'avant le numéro dans le document CSV.
la source
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
la source
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.
la source
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.
la source
Mettez un guillemet simple avant le champ. Excel le traitera comme du texte, même s'il ressemble à un nombre.
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
la source