python-docx : automatise tes rapports Word en Python

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom": "python-docx", "version": "1.2.0"}

Difficulté

Débutant

Tu passes tes vendredis à copier-coller des chiffres dans Word ? Un rapport par client, un tableau par semaine, toujours la même mise en page ? python-docx génère ces documents à ta place : titres, paragraphes, tableaux, images. En Python, en quelques lignes, sans jamais ouvrir Word.

La librairie python-docx manipule les fichiers .docx comme une suite d'objets : un Document, des paragraphes, des titres, des tableaux. Tu écris ton script une fois, et il pond cent rapports identiques en une seconde. Voici comment t'y mettre.

Installer python-docx

Installation en une commande :

bash
pip install python-docx

Ton premier document

Le squelette minimal tient en quatre lignes. On crée un objet Document, on ajoute un titre et un paragraphe, puis on sauvegarde.

python
from docx import Document

doc = Document()
doc.add_heading("Rapport mensuel", level=1)
doc.add_paragraph("Généré automatiquement avec python-docx.")
doc.save("rapport.docx")

Le fichier rapport.docx apparaît dans ton dossier. Ouvre-le : titre, paragraphe, c'est déjà propre. Mais on peut faire beaucoup mieux.

Mettre en forme : gras, italique, couleur

add_paragraph renvoie un objet auquel tu ajoutes des runs, des morceaux de texte stylés indépendamment. Gras, italique, couleur, taille : tout se règle sur le run.

python
from docx.shared import Pt, RGBColor

p = doc.add_paragraph()
p.add_run("Chiffre d'affaires : ").bold = True
p.add_run("42 300 €").italic = True

r = p.add_run("  (+12 %)")
r.font.color.rgb = RGBColor(0, 128, 0)
r.font.size = Pt(10)

Un run, c'est une portion de texte avec son propre style. Tu enchaînes plusieurs runs dans un même paragraphe pour mélanger gras, italique et couleur sans toucher au reste.

Insérer un tableau

Pour les données, add_table crée une grille. On remplit la première ligne en en-tête, puis on ajoute une ligne par enregistrement. La propriété style applique une mise en forme propre en une seule ligne.

python
donnees = [
    ("Produit", "Ventes", "CA (€)"),
    ("Abonnement Pro", 210, 3150),
    ("Abonnement Starter", 540, 2700),
    ("Licence annuelle", 35, 8750),
]

table = doc.add_table(rows=1, cols=3)
table.style = "Light Grid Accent 1"

hdr = table.rows[0].cells
for i, titre in enumerate(donnees[0]):
    hdr[i].text = titre

for ligne in donnees[1:]:
    cellules = table.add_row().cells
    for i, valeur in enumerate(ligne):
        cellules[i].text = str(valeur)

Un rapport complet en trente lignes

On assemble tout : un script qui lit une liste de données, construit le document et le tableau, puis sauvegarde un fichier par mois. C'est le genre de script qu'on garde dans un coin et qui fait gagner une heure chaque semaine.

python
from docx import Document

def generer_rapport(mois, ventes, ca_total):
    doc = Document()
    doc.add_heading(f"Rapport commercial - {mois}", level=1)

    p = doc.add_paragraph()
    p.add_run("Chiffre d'affaires total : ").bold = True
    p.add_run(f"{ca_total} €")

    table = doc.add_table(rows=1, cols=2)
    table.style = "Light Grid Accent 1"
    table.rows[0].cells[0].text = "Produit"
    table.rows[0].cells[1].text = "Ventes"

    for produit, nombre in ventes:
        cellules = table.add_row().cells
        cellules[0].text = produit
        cellules[1].text = str(nombre)

    doc.add_paragraph("Généré automatiquement, sans ouvrir Word.")
    doc.save(f"rapport_{mois}.docx")
    print(f"rapport_{mois}.docx créé")

generer_rapport(
    "septembre",
    [("Pro", 210), ("Starter", 540), ("Licence", 35)],
    "14 600",
)

python-docx ne remplace pas un humain qui rédige : il remplace l'humain qui recopie. Pour les rapports répétitifs, les factures, les contrats types ou les tableaux de bord hebdomadaires, c'est l'un des outils les plus rentables de ton arsenal Python. Tu écris la logique une fois, et Word bosse pour toi.

Pour aller plus loin : add_picture pour insérer des images, add_page_break pour paginer, et les styles prédéfinis du .docx pour une mise en page irréprochable. La documentation officielle est courte et bien fichue.