Le grand secret : un .xlsx est un .zip deguise#
Quand tu travailles avec un fichier .csv, tu peux l'ouvrir dans un editeur de texte et tout lire : c'est du texte brut. Mais un fichier Excel .xlsx ? Ouvre-le dans un editeur de texte et tu n'obtiens que du charabia. Pourquoi ?
Parce qu'un .xlsx est en realite une archive .zip. A l'interieur, ce ne sont pas des donnees secretes : c'est un petit dossier rempli de fichiers XML (le format de balises vu en classe), plus quelques images et reglages. Microsoft a juste choisi de tout compresser ensemble et de mettre l'extension .xlsx au lieu de .zip.
echantillons.xlsx2. Renomme-le en
echantillons.zip3. Decompresse-le (clic droit -> Extraire) : un dossier apparait, rempli de XML.
Voici exactement ce qu'on trouve en decompressant le vrai fichier releves-meteo.xlsx (celui que tu peux telecharger plus bas) :
Le CSV ne contient que des donnees. Le XLSX, lui, transporte aussi les couleurs, les formules, les graphiques, plusieurs feuilles... Tout ca explique pourquoi il a besoin d'un dossier entier plutot que d'un seul fichier texte.
Ou sont les donnees ? Dans xl/worksheets/sheet1.xml#
La feuille qui contient tes chiffres s'appelle sheet1.xml. Si on enleve les longues lignes techniques du debut, voici le coeur du fichier - la partie <sheetData> :
On decode les balises comme en classe :
| Balise | Signification |
|---|---|
<row r="2"> | une rangee, ici la rangee numero 2 |
<c r="B2"> | une cellule (cell), ici la case B2 |
<v>20.1</v> | la valeur (value) rangee dans la cellule |
t="s" | l'attribut "type = string" : la valeur n'est pas un nombre, c'est un texte range ailleurs |
sharedStrings.xml<v>0</v> et <v>1</v> avec t="s". Ce ne sont pas les nombres 0 et 1 ! Ce sont des numeros de tiroir. Les vrais textes sont ranges une seule fois dans un fichier a part, sharedStrings.xml :
Donc la cellule A1 dit t="s" et <v>0</v> : "va chercher le tiroir 0", soit le texte jour. La cellule B1 pointe vers le tiroir 1, soit temperature. Excel fait ca pour ne pas reecrire mille fois le meme mot quand il se repete dans toute la feuille : il le range une seule fois et n'y met que des numeros. Astucieux pour economiser de la place.
Excel versus CSV : le meme tableau, deux philosophies#
Reprenons exactement les memes donnees - trois releves de temperature. A gauche, le format CSV ; a droite, tout ce qu'il a fallu zipper pour faire un XLSX equivalent.
42 octets Lisible tel quel dans n'importe quel editeur.
~5000 octets Illisible sans le decompresser d'abord.
| Critere | CSV | XLSX (Excel) |
|---|---|---|
| Nature | Texte brut | Archive zip de fichiers XML |
| Lisible a l'oeil nu | Oui, directement | Non, il faut le decompresser |
| Couleurs, polices, bordures | Impossible | Oui (dans styles.xml) |
| Formules de calcul | Impossible | Oui |
| Plusieurs feuilles, graphiques | Impossible | Oui |
| Taille pour de petites donnees | Minuscule | Plus lourd (l'archive a un cout fixe) |
| Facile a lire en Python | Tres facile (module csv) | Demande une librairie (openpyxl, pandas) |
En Python, lire les deux ressemble a ceci :
# CSV : deja dans la librairie standard import csv with open("releves-meteo.csv", encoding="utf-8") as fichier: lecteur = csv.DictReader(fichier) for rangee in lecteur: print(rangee["jour"], rangee["temperature"]) # XLSX : il faut une librairie en plus (openpyxl) from openpyxl import load_workbook classeur = load_workbook("releves-meteo.xlsx") feuille = classeur.active for rangeeCellules in feuille.iter_rows(values_only=True): print(rangeeCellules)Visualiser le XML dans le navigateur#
Pas besoin d'un logiciel special pour regarder du XML : ton navigateur sait deja le faire. Glisse un fichier .xml directement dans un onglet (ou fais Fichier -> Ouvrir), et il l'affiche sous forme d'arbre repliable : tu peux ouvrir et fermer chaque balise pour explorer la structure.
Telecharge les vrais fichiers extraits du releves-meteo.xlsx et ouvre-les dans ton navigateur pour voir l'arbre toi-meme :
Voir l'arbre, c'est bien. Mais ce que tu veux vraiment, c'est reconstituer le tableau a partir du XML. C'est exactement ce que fait Excel quand il ouvre le fichier. Le decodeur ci-dessous le fait sous tes yeux : il lit sheet1.xml, va chercher les textes dans sharedStrings.xml, et rebatit la feuille. Modifie les valeurs et reclique pour experimenter.
Decodeur de feuille Excel
xl/worksheets/sheet1.xmlxl/sharedStrings.xmlt="s" : texte cherche dans sharedStrings
cellule normale : nombre ecrit directement