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.
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:
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.
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
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.
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.
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.
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). .
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):
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.
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.
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.
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
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.
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.
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.
Ajoutez simplement 'avant le numéro dans la doc CSV.