J'ai un certain nombre de fichiers .csv. Certains d'entre eux sont délimités par des virgules, d'autres par des tabulations (peut-être devraient-ils s'appeler .tsv ...)
L'extension csv
est associée à Excel lors de l'installation d'Excel. Cependant, si j'ouvre l'un de ces fichiers avec Excel, tout est vidé dans la même colonne et la virgule n'est pas interprétée comme un délimiteur.
Je peux au lieu de Fichier -> Importer ..., sélectionner le fichier, et choisir la manière précise d’interpréter le contenu (délimiteurs, types de données, etc.) mais la plupart du temps, je veux juste regarder à déposer dans une vue de table claire. Je ne veux pas le traiter avec Excel.
Existe-t-il un moyen de demander à Excel d'interpréter automatiquement le délimiteur et d'afficher le fichier CSV sous forme de tableau approprié dès son ouverture? J'ai besoin de cela pour pouvoir utiliser Excel comme visualiseur rapide de tels fichiers.
Je soupçonne qu'il doit y avoir un moyen, sinon Excel ne s'associerait pas avec des fichiers CSV.
Lors de l’ouverture des fichiers CSV, Excel utilisera un paramètre système régional appelé List separator
pour déterminer le délimiteur par défaut à utiliser.
Microsoft Excel ouvre les fichiers .csv, mais selon les paramètres régionaux du système, il peut s’attendre à un point-virgule comme séparateur au lieu d’une virgule, car dans certaines langues, la virgule est utilisée comme séparateur décimal. (de Wikipedia )
Sous Windows _ , vous pouvez modifier le paramètre List separator
dans le Regional and Language Options
comme spécifié sur le site Web de support Office :
Changer le séparateur dans un fichier texte CSV
- Cliquez sur le menu Démarrer de Windows.
- Cliquez sur Panneau de configuration.
- Ouvrez la boîte de dialogue Options régionales et linguistiques.
- Cliquez sur l'onglet Options régionales.
- Cliquez sur Personnaliser/Paramètres supplémentaires (Win10).
- Tapez un nouveau séparateur dans la zone Séparateur de liste.
- Cliquez deux fois sur OK.
Remarque : cela ne fonctionne que si le symbole décimal n'est pas également désigné par une virgule (conformément à la citation de Wikipedia ci-dessus). Si tel est le cas, Excel utilisera non, virgule comme séparateur de liste, même si elle est choisie. Pour de nombreuses régions autres que les États-Unis, la virgule est le symbole décimal par défaut.
Sur Mac OS X _ , ce paramètre semble être déduit du paramètre séparateur décimal (dans le volet Langue et région de Préférences Système, accédez à Avancé). Si séparateur décimal est un point, le séparateur CSV par défaut sera une virgule, mais si séparateur décimal est une virgule, le séparateur CSV par défaut sera un point-virgule.
Comme vous l'avez dit vous-même dans le commentaire, les utilisateurs de Mac ont la possibilité de consulter rapidement ces fichiers CSV. C'est un plugin pour Quick Look appelé quicklook-csv qui gère la détection de séparateur.
Si vous ne souhaitez pas modifier le format du fichier et si vous ciblez EXCLUSIVEMENT, vous pouvez utiliser l'astuce suivante pour vous aider.
Ajoutez une nouvelle ligne en haut du fichier avec le texte "sep=,"
(guillemets compris) afin que Excel puisse ouvrir le fichier avec "," comme séparateur de liste.
Il est très facile d'éviter de modifier les paramètres régionaux de Windows et d'obtenir un résultat cohérent. Mais c'est spécifique à Excel.
Vous n'avez pas besoin des guillemets autour du sep=,
- tant que c'est la première ligne du fichier, cela fonctionnera, du moins avec Excel 2016.
J'ai découvert que si le fichier est délimité par des tabulations, sep=\t
fonctionne correctement, avec et sans les guillemets.
Lorsque le séparateur dans les paramètres régionaux n'est pas une virgule mais un point-virgule (séparateur néerlandais), renommez le fichier CSV en un fichier TXT. Cliquez-droit sur le fichier TXT et sélectionnez "Ouvrir avec", puis sélectionnez "Excel". Dans Excel, sélectionnez la première colonne, sélectionnez les données dans le ruban et séparez le texte en colonnes.
OR
Installez LibreOffice et ouvrez le fichier CSV avec LibreOffice Calc.
le meilleur moyen sera de l'enregistrer dans un fichier texte avec l'extension csv
Sub ExportToCSV()
Dim i, j As Integer
Dim Name As String
Dim pathfile As String
Dim fs As Object
Dim stream As Object
Set fs = CreateObject("Scripting.FileSystemObject")
On Error GoTo fileexists
i = 15
Name = Format(Now(), "ddmmyyHHmmss")
pathfile = "D:\1\" & Name & ".csv"
Set stream = fs.CreateTextFile(pathfile, False, True)
fileexists:
If Err.Number = 58 Then
MsgBox "File already Exists"
'Your code here
Return
End If
On Error GoTo 0
j = 1
Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)
stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))
j = j + 1
i = i + 1
Loop
stream.Close
End Sub
Pour le néerlandais, Excel 2008 sur Windows 7 ne répondait pas à la norme RFC4180:
"Les champs contenant des sauts de ligne (CRLF), des guillemets doubles et des virgules doivent être placés entre guillemets."
Un fichier séparé par des virgules avait correctement des champs avec une virgule (séparateur décimal néerlandais) entre guillemets. Dans les paramètres régionaux néerlandais, le séparateur décimal est ,
et le séparateur de liste est ;
. Excel ne peut donc pas lire le fichier avec ,
utilisé pour les deux (même après avoir explicitement changé le séparateur de liste en ,
dans le Panneau de configuration).
L'entrée ressemble à:
"06-07-2017 17:03:18","********",0:01:04,Uitgaand,"0,1879","0,2273","0,0395",21
La solution a été donnée par @ user280725:
Utilisez le bloc-notes pour insérer comme première ligne:
sep=,
(Cela signifie que la note de l'utilisateur @zakinster dans sa solution n'a plus besoin d'être appliquée.)
Assurez-vous d'inspecter le fichier CSV dans un éditeur simple, tel que le Bloc-notes, afin de vous assurer qu'il est correctement formaté.
J'ai ajouté cette réponse après avoir résolu un bogue stupide dans lequel les fichiers CSV que j'avais créés avec VB n'étaient pas ouverts avec des colonnes distinctes dans Excel. J'ai découvert que la manière dont j'avais écrit les lignes entourait chaque ligne de guillemets. Excel masquait les guillemets et montrait toute la ligne de la colonne A, donnant l'impression que les séparateurs de virgule étaient ignorés.