Exporter à coup sûr du CSV

Exporter des données au format CSV n'est pas si trivial qu'il n'y paraît. Dès que vos données contiennent des virgules ou des guillemets, tout semble partir en vrille.

Il y a une astuce.

Voici comment procéder pour exporter à coup sûr vos données en CSV:
  • Doubler tout séparateur de chaîne trouvé dans la cellule ( ga"bu"zo ---> ga""bu""zo )
  • Quoter systématiquement le contenu de chaque cellule ( toto ----> "toto" )
  • Puis ajouter les cellules entre elles en séparant par une virgule. ( "toto","titi","tata" )
  • Puis ajouter les lignes entre elles en séparant par \r\n


Et voilà !

Tout sera exporté correctement, même si vos cellules contiennent des virgules, des espaces, des guillemets ou même des retours à la ligne.

Exemple


Voici un fichier CSV complexe:

"colonne A","colonne B","colonne C"
"Il a dit ""coucou !"" hier.","Hé, Je contiens une virgule !","125"
"Attention:","Je contient
un retour à la ligne.","777"


Ce qui donne dans Excel:

Notes

  • Note 1 : CSV signifie Comma-Separated Value. Le séparateur standard est donc la virgule (comma). Certaines versions d'Excel utilisent le point-virgule (semicolon) comme séparateur. Il faudra donc renommer le .csv en .txt, puis l'ouvrir avec Excel et préciser (dans le wizard d'importation) la virgule (comma) comme séparateur.
  • Note 2 : Vous ne contrôlez pas la façon dont Excel va interpréter le contenu de chaque cellule. Par défaut, chaque cellule sera importée avec le type "General". Par exemple, tout numéro de téléphone comme "+33-123456" sera interprété comme une addition par Excel (qui calculera -123423). (Oui je sais, il est très con, Excel)
  • Note 3 : Selon le paramétrage régional de Windows, le séparateur de nombre sera la virgule ou le point. C'est à vous de formater les nombres en fonction de la culture de vos utilisateurs. (Donc: Pensez à prévoir dans les pages web une option pour permettre à l'utilisateur de choisir le séparateur décimal.)
  • Note 4 : Attention au signe égal en début de cellule: Excel essaiera d'interpréter ce qui suit dans la cellule comme une formule.


Exemple:
"","12"
"","34"
"Total:","=B1+B2"


Comme vous pouvez le voir, le format CSV pose divers problèmes (aucun contrôle sur la manière dont le contenu des cellules est interprété, aucun formattage (couleurs, format de nombre, etc..))
On peut palier à ces problèmes avec une autre astuce: Exportez des fichiers html (contenant des styles CSS spéciaux) et renommez ces fichiers html en .xls:
Excel saura l'ouvrir sans problème, et prendra en compte le format des cellules (type, couleur, etc.)
Voir (en anglais)
Publié par sebsauvage - Dernière mise à jour le 18 novembre 2009 à 13:01 par marlalapocket
Ce document intitulé « Exporter à coup sûr du CSV » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  Exporter à coup sûr du CSV
  •  Importation fichier excel sous R » Meilleure réponse: Enregistre tes données sous .csv dans excel (avec séparation ";"). Importe le fichier de données dans R avec : data<-read.table("C:/.../fichier_import.csv",sep=";") Si tu as des en-têtes aux colonnes : data<...
  •  Dessiner en 3D avec Google SketchUp » Fiches pratiques : Google SketchUp est un outil de modélisation 3D très simple d'utilisation, racheté par Google en mars 2006. Il est disponible gratuitement à l'adresse http://sketchup.google.fr. Une fois le fichier exécutable téléchargé, double-cliquez dessus pour...
  •  [Excel vba]enregistrement au format csv (Résolu) » Meilleure réponse: Bonjour, J'ai eu le même souci de mon côté avec des macros Excel 200 qui ne fonctionne plus sous 2003. Tout simplement car dans l'instruction SAVEAS, il y a une nouveau paramètre nommé 'local' Il faut le mettre à TRUE pour qu'il prenne
  •  Exporter une table de PhpMyAdmin en .csv (Résolu) » Meilleure réponse: Un truc comme ça ? <?php // Connexion à la base de données mysql_connect("localhost", "root"); mysql_select_db("ta_bdd"); $resQuery = mysql_query("SELECT * FROM ta_table"); //Header permettant la création d'un CSV header('Content-
  •  Importation fichier Excel sous R » Meilleure réponse: Je suis parvenue à résoudre mon problème.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
La Licence GPL
Votre première application graphique avec Python et Glade