openpyxl#
courant
Bibliothèque tierce
pip install openpyxl — ne fait pas partie de la bibliothèque standard. Permet de lire/écrire des fichiers Excel .xlsx (pas .xls).
Lire un fichier existant#
from openpyxl import load_workbook
classeur = load_workbook("donnees.xlsx")
classeur.sheetnames # ["Feuil1", "Ventes", ...]
feuille = classeur["Ventes"] # accès par nom
feuille = classeur.active # ou : la feuille active
feuille["A1"].value # valeur d'une cellule
feuille.cell(row=1, column=1).value # équivalent, indices 1-based
feuille.max_row; feuille.max_column # dimensions utilisées
Piège
Les index de lignes/colonnes commencent à 1, pas à 0 (cell(row=1, column=1) est la cellule A1).
Parcourir les lignes#
for ligne in feuille.iter_rows(min_row=2, values_only=True): # saute l'en-tête
nom, age, ville = ligne
print(nom, age, ville)
for ligne in feuille.iter_rows(min_row=2, max_row=10, min_col=1, max_col=3):
for cellule in ligne:
print(cellule.coordinate, cellule.value) # ex: "A2", "Ana"
Piège
Par défaut, load_workbook() charge les formules (ex. =SOMME(A1:A10)) et non leur résultat calculé. Utiliser load_workbook("f.xlsx", data_only=True) pour récupérer la dernière valeur calculée par Excel — mais attention, ce champ est vide si le fichier n'a jamais été ouvert dans Excel.
Créer un nouveau fichier#
from openpyxl import Workbook
classeur = Workbook()
feuille = classeur.active
feuille.title = "Résultats"
feuille["A1"] = "Nom"
feuille["B1"] = "Score"
feuille.append(["Ana", 18]) # ajoute une ligne complète
feuille.append(["Bo", 15])
classeur.save("resultats.xlsx") # sans .save(), rien n'est écrit sur le disque
Plusieurs feuilles#
classeur.create_sheet("Détails")
classeur.copy_worksheet(feuille) # duplique une feuille existante
del classeur["Détails"] # supprime une feuille
Mise en forme basique#
from openpyxl.styles import Font, PatternFill, Alignment
cellule = feuille["A1"]
cellule.font = Font(bold=True, size=12, color="FFFFFF")
cellule.fill = PatternFill("solid", fgColor="306998")
cellule.alignment = Alignment(horizontal="center")
feuille.column_dimensions["A"].width = 20 # largeur de colonne