Une phrase en résume l'essentiel : le CSV est un fichier texte avec des virgules dedans ; le XLSX est un dossier zippé de XML que seul un tableur comprend. Presque toutes les différences pratiques en découlent.
La bonne question est rarement « lequel est le meilleur ». C'est « à qui je donne ce fichier, et qu'en restera-t-il en chemin ».
La réponse rapide
- Vous donnez des données à un programme (import, API, script, base de données) : CSV.
- Vous donnez un document à une personne (mise en forme, formules, plusieurs feuilles) : XLSX.
- Le fichier est gros (disons plus de 100 Mo ou 500 000 lignes) : CSV.
- Les valeurs doivent revenir exactement comme elles sont parties (codes postaux, codes produit, numéros de téléphone, longs identifiants) : CSV, et le préciser, parce que c'est le tableur qui les recevra qui va les abîmer.
Ce que sont vraiment ces deux formats
Un CSV contient une ligne par enregistrement, des valeurs séparées par des virgules, et des guillemets autour de toute valeur qui contient une virgule. On peut en lire un dans un éditeur de texte. On peut en écrire un avec echo. Il existe une spécification, la RFC 4180, et un accord quasi général pour en ignorer certaines parties, ce qui explique que les séparateurs varient selon les pays et que les CSV cassés forment un sujet à part entière.
Il stocke des valeurs, et rien d'autre. Pas de types, pas de formats, pas de formules, pas de couleurs, pas de deuxième feuille. Une cellule contenant 007 et une cellule contenant le nombre sept sont indiscernables une fois écrites : ce ne sont que les caractères entre deux virgules, et la suite dépend entièrement de ce qui les lit.
Un XLSX est une archive ZIP. Renommez-en un en .zip, décompressez-le, et vous obtenez un dossier de XML : un fichier par feuille, une table de chaînes partagées, une table de styles, des fichiers de relations. Il stocke tout ce qu'un tableur sait faire : types de cellules, formats de nombres, formules et leurs résultats en cache, graphiques, mise en forme conditionnelle, volets figés, macros dans la variante .xlsm.
Côte à côte
| CSV | XLSX | |
|---|---|---|
| Type de fichier | Texte brut | Archive XML compressée |
| Limite de lignes | Aucune | 1 048 576 par feuille |
| Limite de colonnes | Aucune | 16 384 |
| Plusieurs feuilles | Non | Oui |
| Formules | Non | Oui |
| Mise en forme, graphiques | Non | Oui |
| Types de données | Aucun : tout est du texte | Explicite pour chaque cellule |
| Taille, 1 M de lignes × 10 colonnes | ~150 Mo | ~40 Mo |
| S'ouvre dans un éditeur de texte | Oui | Non |
| Lisible dans 20 ans | Presque certainement | Probablement |
| Diffs dans git | Propres | Impossibles |
Deux lignes méritent des précisions.
La taille, et pourquoi la réponse s'inverse
Le XLSX est compressé : pour les mêmes données, il est donc généralement plus petit sur le disque, souvent de trois à quatre fois. Le CSV paraît alors un mauvais choix pour les gros volumes, ce qui est exactement l'inverse de la réalité.
Pour un gros fichier, ce qui compte n'est pas la taille sur le disque, mais ce qui se passe à l'ouverture. Un XLSX doit être décompressé et analysé pour construire un modèle d'objets avant que vous voyiez la première ligne ; tout finit en mémoire. Un CSV peut se lire ligne par ligne : un outil peut donc traiter en flux un fichier de 5 Go qu'il ne pourrait jamais charger entièrement. C'est pourquoi toute réponse à « comment traiter ce fichier avec DuckDB » commence par un CSV, et pourquoi la limite de lignes ci-dessus compte : un export de trois millions de lignes ne peut pas tenir dans un XLSX sur une seule feuille, quelle que soit sa taille.
Les types, et l'aller-retour qui dévore vos données
C'est la différence qui coûte vraiment du travail.
Comme le CSV ne porte aucun type, un tableur doit deviner à l'import. Ces suppositions sont systématiques, et systématiquement fausses de quatre façons :
01234devient1234: le zéro initial d'un code postal disparaît.4019283746501928devient4.01928E+15: un identifiant en notation scientifique, dont les derniers chiffres sont perdus, pas masqués.3/4/2026devient le 4 mars ou le 3 avril selon les paramètres régionaux.MAR1,SEPT2,DEC5deviennent des dates. En 2020, des chercheurs en génétique ont renommé 27 gènes humains à cause de cela.
Ouvrez un CSV dans Excel, réenregistrez-le en CSV, et ces changements sont désormais définitifs dans le fichier. Le CSV n'a pas perdu les données. Le tableur avec lequel vous l'avez ouvert, si. D'où l'intérêt de lire un CSV avec un outil qui le lit comme un CSV, et non comme un document de tableur :
Lit le fichier comme un CSV au lieu de l'importer : pas de conversion de types, pas de devinettes sur les dates selon la région, et des requêtes SQL ou en langage courant sur les valeurs telles qu'elles sont écrites.
Ce que ça faitChoisir selon la situation
Utilisez le CSV quand :
- Quelque chose d'automatisé est à l'autre bout : un import en base, un script, une API.
- Le fichier est gros, ou grossit.
- Les données doivent faire l'aller-retour octet pour octet.
- Il va dans un gestionnaire de versions et vous voulez voir ce qui a changé.
- Vous avez besoin qu'il reste lisible dans dix ans sans hypothèse sur les logiciels.
Utilisez le XLSX quand :
- Une personne l'ouvre, et la mise en page fait partie du message.
- Des formules doivent rester actives.
- Les données comportent vraiment plusieurs feuilles.
- Les types de cellules comptent et vous ne maîtrisez pas ce qui l'ouvrira. C'est l'argument honnête en faveur du XLSX : des types que le destinataire ne peut pas mal interpréter.
- Vous avez besoin de graphiques, de filtres ou de mise en forme conditionnelle dans le fichier lui-même.
N'utilisez ni l'un ni l'autre quand : le jeu de données dépasse ce qu'un tableur peut contenir et que vous l'interrogerez à répétition. C'est le travail de Parquet, ou d'une base de données. Parquet est orienté colonnes, typé et compressé, et DuckDB comme pandas le lisent nativement.
Ce que l'on croit à tort
« Le CSV est un format Excel. » Non ; Excel se contente de l'ouvrir, et c'est pour cela que la conversion de types ci-dessus se produit. Le CSV précède Excel de vingt ans.
« XLS et XLSX, c'est pareil. » Le XLS est le format binaire d'avant 2007, qu'on voit encore arriver de vieux systèmes. Le XLSX est son remplaçant, basé sur OOXML. Si on vous remet un .xls, convertissez-le. Excel récent l'ouvre avec des avertissements et certains outils le refusent purement et simplement.
« Le XLSX est plus sûr, c'est un vrai format. » Le XLSX peut contenir des macros, des liens externes et des charges DDE ; le CSV est du texte inerte, hormis l'injection de formules, où une valeur commençant par =, +, - ou @ est exécutée par le tableur qui l'ouvre. Les deux demandent de la prudence, dans des directions différentes.
« Convertir ne fait rien perdre. » De XLSX vers CSV, toutes les formules disparaissent (on garde la dernière valeur calculée), ainsi que toute feuille au-delà de la première et toute la mise en forme. De CSV vers XLSX, on ajoute des types qui n'ont jamais été dans les données, et c'est là que les dégâts se produisent. Convertir un CSV en Excel sur un téléphone explique comment le faire sans casse.
La seule habitude qui vaille la peine
Quand vous envoyez un CSV contenant des codes, des identifiants ou des dates, dites-le dans le message : « ouvrez-le avec une étape d'import et réglez la colonne ID sur Texte ». Deux lignes d'e-mail évitent l'échec de qualité des données le plus courant au bureau, et aucun choix de format ne l'évite à lui seul.