Aller au contenu

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

Formules#

feuille["C1"] = "=SOMME(B2:B10)"     # écrite telle quelle, Excel la calcule à l'ouverture