openpyxl : automatise tes fichiers Excel en Python, sans jamais ouvrir Excel

openpyxl : automatise tes fichiers Excel en Python, sans jamais ouvrir Excel

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom": "openpyxl", "version": "3.1.x"}

Difficulté

Débutant

Tout le monde a déjà rempli un fichier Excel à la main : les mêmes en-têtes, les mêmes formules, les mêmes copier-coller, mois après mois. C'est lent, répétitif, et une seule faute de frappe fausse tout ton rapport. openpyxl règle le problème à la racine : cette bibliothèque Python lit et écrit les fichiers .xlsx directement, sans jamais lancer Excel.

Avec elle, tu génères un rapport complet — en-têtes en gras, colonnes redimensionnées, totaux calculés par formule — en quelques secondes, et tu le recommences le mois suivant en changeant une seule liste. Le tout sans interface graphique, sans clic, sans erreur humaine.

On part d'un cas concret : les ventes d'une petite équipe, rangées dans une simple liste Python. On va les écrire dans un vrai classeur, les mettre en forme, ajouter des totaux, puis relire le fichier pour vérifier. Chaque étape est indépendante et copiable telle quelle.

Pour suivre, il te faut Python 3 et rien d'autre : un pip install openpyxl suffit. Le module sait aussi bien créer un classeur de zéro que lire ou modifier un fichier existant.

1. Installer openpyxl et créer son premier classeur

L'installation tient en une commande. Ensuite, tout part de la classe Workbook, qui représente le classeur, et de la feuille active récupérée avec .active. Écrire dans une cellule se fait en la désignant par sa coordonnée — A1, B2 — et en lui affectant une valeur. save() écrit le résultat sur le disque.

bash
pip install openpyxl

On crée un classeur, on nomme sa feuille, puis on remplit quatre cellules à la main. Le fichier ventes.xlsx apparaît dans ton dossier, lisible par n'importe quel tableur.

python
from openpyxl import Workbook

wb = Workbook()
feuille = wb.active
feuille.title = "Ventes"

feuille["A1"] = "Produit"
feuille["B1"] = "Quantité"
feuille["A2"] = "Clavier"
feuille["B2"] = 120

wb.save("ventes.xlsx")

2. Écrire des données en boucle

Écrire cellule par cellule, c'est vite fastidieux. Dès que tes données vivent dans une liste, une boucle fait le travail. La méthode append() ajoute une ligne entière à la suite, sans calculer la moindre coordonnée : parfait pour un CSV, une base de données ou une API.

python
donnees = [
    ("Produit", "Quantité", "Prix unitaire"),
    ("Clavier", 120, 29.90),
    ("Souris", 210, 19.50),
    ("Écran", 45, 149.00),
    ("Webcam", 90, 39.90),
]

for ligne in donnees:
    feuille.append(ligne)

wb.save("ventes.xlsx")

3. Mettre en forme sans cliquer

Un rapport brut, personne n'a envie de le lire. openpyxl applique la mise en forme par code : on récupère une cellule avec feuille["A1"], puis on règle sa police via font et son fond via fill. La largeur des colonnes se contrôle dans column_dimensions.

python
from openpyxl.styles import Font, PatternFill

en_tete = Font(bold=True, color="FFFFFF")
fond = PatternFill("solid", fgColor="2E7D32")

for cellule in ["A1", "B1", "C1"]:
    c = feuille[cellule]
    c.font = en_tete
    c.fill = fond

feuille.column_dimensions["A"].width = 18
feuille.column_dimensions["B"].width = 12
feuille.column_dimensions["C"].width = 16

wb.save("ventes.xlsx")

4. Ajouter des formules

Le vrai atout d'Excel, ce sont les formules. openpyxl les écrit comme n'importe quelle valeur : tu poses la formule en texte dans la cellule, et Excel la calcule à l'ouverture. Ici, une colonne de totaux par produit et une somme globale.

python
for ligne in range(2, 6):
    feuille[f"D{ligne}"] = f"=B{ligne}*C{ligne}"

feuille["D6"] = "=SOMME(D2:D5)"
feuille["A6"] = "Total"
feuille["A6"].font = Font(bold=True)

wb.save("ventes.xlsx")

5. Lire un classeur existant

Dans l'autre sens, openpyxl ouvre un .xlsx et te rend ses valeurs en Python. load_workbook() charge le fichier, et iter_rows() parcourt les lignes déjà remplies. Pratique pour récupérer des données saisies par d'autres, sans les retaper à la main.

python
from openpyxl import load_workbook

wb = load_workbook("ventes.xlsx")
feuille = wb.active

for ligne in feuille.iter_rows(values_only=True):
    print(ligne)

6. Gérer plusieurs feuilles

Un rapport gagne souvent à séparer les mois ou les équipes. create_sheet() ajoute une feuille, et tu bascules dessus par son nom ou son index. Chaque feuille a son propre contenu, indépendant des autres.

python
wb = Workbook()
feuille = wb.active
feuille.title = "Janvier"

wb.create_sheet("Février")
wb["Février"]["A1"] = "Produit"
wb["Février"].append(("Clavier", 130))

wb.save("rapport.xlsx")

Voilà, tu sais générer et lire des fichiers Excel sans jamais toucher au logiciel. openpyxl va bien plus loin — graphiques natifs, fusion de cellules, filtres, validation de données — mais ces six briques couvrent déjà l'essentiel des rapports du quotidien. La prochaine fois que tu dois remplir le même tableau que le mois dernier, écris la boucle une fois : elle refera le travail pour toi, sans faute de frappe.