Aller au contenu
Accueil » Lire et écrire des fichiers Excel en Python

Lire et écrire des fichiers Excel en Python

    Bonjour à tous,
    Nous allons voir dans cet article comment interagir avec un fichier Excel tout en développant un script en Python. Nous verrons comment lire un fichier et également comment écrire à l’intérieur.

    Pour réaliser cette tâche, il existe plusieurs librairies comme openpyxl et xlwt. Néanmoins, nous nous focaliserons sur la librairie xlsxwriter et son interaction avec la librairie pandas. Si vous souhaitez que je fasse un article sur les deux premières, n’hésitez pas à le mettre en commentaire.

    comment lire et écrire dans un fichier excel en python avec les librairies pandas et xlsxwriter

    Pourquoi XlsxWriter et Pandas ?

    Concernant Pandas, la simple et bonne raison est que nous verrons cette librairie plus en détail dans d’autres articles. En effet, cette librairie est très puissante pour manipuler de grande quantité de données, sous forme de tableau, avec des variables de différents types. Ce sont donc une courte introduction à l’utilisation de ce module.

    La librairie XlsxWriter vous permettra d’écrire dans les cellules du fichier Excel les données que vous voudrez. Egalement, vous pourrez insérer des formules, de nouvelles feuilles de travail. De plus vous pourrez gérer le formattage des données et ajouter des graphiques ou des images. Vous verrez que cette bibliothèque a été conçue pour être facile à utiliser. Il faudra néanmoins avoir au moins les version de python 2.7 ou 3.4 (ou plus).

    Installer les librairies

    Pour installer les librairies, on retrouve la classique commande « pip » à mettre dans la console de commande.

    pip install pandas
    pip install xlsxwriter
    
    Python

    Et bien sûr, lorsque que vous aurez besoin de ces librairies dans vos programmes, on n’oublie pas de les importer !

    import pandas as pd
    import xlsxwriter
    Python

    Créer un fichier Excel avec XlsxWriter

    XlsxWriter offre une grande variété de fonctionnalités pour créer des feuilles de calcul Excel y compris la mise en forme et la création de graphiques. Dans un premier temps, nous allons voir comment créer un fichier et écrire dedans.

    Pour créer une feuille de calcul Excel, nous allons d’abord créer un classeur (« Workbook »). Puis nous allons ajouter des feuilles (« Worksheet ») à cet objet « Workbook ».

    import xlsxwriter
    
    # Création du classeur
    workbook = xlsxwriter.Workbook("fichier_exemple.xlsx")
    worksheet = workbook.add_worksheet()
    
    # Nous allons maintenant écrire dans le fichier
    worksheet.write("B2", "Hello")
    worksheet.write("C2", "World !")
    
    # Nous fermons ensuite le classeur
    workbook.close()
    Python
    résultat de la création du fichier Excel avec la libriaire XlsxWriter en Python

    Formatage des données

    Il est possible via cette librairie de définir le format d’une cellule dans le fichier excel que nous venons de créer.

    import xlsxwriter
    
    workbook = xlsxwriter.Workbook("fichier_exemple.xlsx")
    worksheet = workbook.add_worksheet()
    
    # Définition des formats
    format_entete = workbook.add_format({'font_name': 'Arial', 'font_size': 16})
    format_publie = workbook.add_format({'border': 1})
    format_a_faire = workbook.add_format({'bg_color': '#C6EFCE', 'bold': 1})
    
    # Ajout des données
    worksheet.write('B2', 'N° article', format_entete)
    worksheet.write('C2', 'Etat', format_entete)
    
    etats = ["Publié", "Publié", "Publié", "A faire"]
    for i in range(4):
        worksheet.write(f"B{i+3}", f"Article n°{i+3}")
        if etats[i] == "Publié":
            worksheet.write(f"C{i+3}", etats[i], format_publie)
        else:
            worksheet.write(f"C{i+3}", etats[i], format_a_faire)
    
    # On change la largeur des colonnes
    worksheet.set_column('B:C',15)
    
    # On n'oublie pas de fermer le fichier !
    workbook.close()
    
    Python

    Dans cet exemple, le programme crée le fichier Excel « fichier_exemple.xlsx » et ajoute un tableau de suivi des articles. On définit différents formats pour les entêtes, pour les articles publiés et ceux qu’ils restent à faire. Une boucle « for » est utilisée pour l’exemple. On note l’utilisation de la fonctionnalité « f-strings » pour formater des arguments. J’explique comment utiliser cette fonctionnalité dans cet article. Enfin, voici le résultat du formatage des données.

    Résultat du formatage des données avec la librairie XlsxWriter en Python

    Comme nous avons pu le voir en exemple, nous pouvons réaliser toutes les tâches manuelles en automatique via les commandes du module « XlsxWriter ». Pour avoir toute la liste des arguments pour gérer les formats, voici la page dédiée.

    Création de graphiques

    Un autre exemple d’application est l’insertion de graphique dans un classeur. En effet, une fois que vous aurez inséré vos données, vous pouvez tout à fait les utiliser pour créer un graphique afin de les illustrer. Je vous mets un exemple avec des données de gestion de budget. Un graphique en barres sera automatiquement créé. Ainsi, les vous pourrez exploiter visuellement vos données.

    import xlsxwriter
    
    # Création d'un classeur avec une feuille
    workbook = xlsxwriter.Workbook('exemple.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Données pour l'exemple
    depenses = ['Loyer', 'Essence', 'Nourriture', 'Divertissement', 'Autre']
    montant = [800, 100, 400, 200, 150]
    
    # Ecriture des données dans la feuille
    worksheet.write_column('A1', depenses)
    worksheet.write_column('B1', montant)
    
    # Création du graphique
    chart = workbook.add_chart({'type': 'column'})
    
    # Configuration du graphique
    chart.add_series({
        'categories': '=Sheet1!$A$1:$A$5',
        'values': '=Sheet1!$B$1:$B$5'})
    
    # Ajout des légendes, titres des axes
    chart.set_title({'name': 'Dépenses'})
    chart.set_x_axis({'name': 'Catégories'})
    chart.set_y_axis({'name': 'Montant'})
    
    # Insertion du graphique dans la feuille de travail
    worksheet.insert_chart('D2', chart)
    
    # Fermeture du classeur
    workbook.close()
    Python

    La création du document est similaire à ce que nous avons vu précédemment. Le programme écrit les données dans les colonnes A et B à partir des cellules A1 et B1 respectivement. Vous noterez qu’il est possible de donner une liste en argument et la fonction « .write_column » écrira automatiquement les données sur la colonne à partir de la cellule de départ.

    Ensuite, le graphique est créé en indiquant son type. Comme sous Excel, le script ajoute automatiquement une série de données en spécifiant la liste des « X » et la liste des « Y ». Et enfin, pour que le graphique soit lisible, l’outil va rajouter les titres des axes ainsi qu’un titre sur le graphique.

    création d'un graphique avec la bibliothèque XlsxWriter en Python

    Excel et la librairie Pandas

    La librairie Pandas est très largement utilisée lorsqu’il s’agit de manipuler des quantités de données conséquentes. Elle permet d’utiliser l’objet « DataFrame » qui n’est autre qu’un tableau avec différents types de données. Nous verrons dans un autre article dédié sur le sujet les possibilités qu’offrent cette librairie.

    Ce qui nous intéresse aujourd’hui, c’est de pouvoir lire et écrire un fichier Excel en interaction avec ce module Pandas. En effet, cette librairie permet de récupérer des données de fichiers textes, CSV par exemple mais aussi à partir des fichiers Excel. Ce type de fichier étant largement utilisé dans le monde professionnel, cela vous sera très utile pour travailler avec vos données existantes.

    Tout d’abord, pour lire un fichier Excel avec Pandas, il suffit d’utiliser la commande « pandas.read_excel ». Voici quelques exemples avec différents arguments utiles.

    import pandas as pd
    
    df = pd.read_excel("exemple_pandas.xlsx")
    print(df)
    >>>         Catégorie  Montant
    >>> 0           Loyer      800
    >>> 1         Essence      100
    >>> 2      Nourriture      400
    >>> 3  Divertissement      200
    >>> 4           Autre      150
    Python

    Si vous avez deux colonnes avec des en-têtes, la fonction « .read_excel » les détecte directement et les associe aux colonnes du tableau.

    # index_col défini la colonne à mettre en index dans le tableau
    df = pd.read_excel("exemple_pandas.xlsx", index_col=0)
    
    # sheet_name permet de spécifier la feuille que vous souhaitez lire
    df = pd.read_excel("exemple_pandas.xlsx", sheet_name="Sheet1")
    
    # dtype permet de spécifier le type de variable dans le colonne
    dtypes = {"Catégorie": str, "Montant": float}
    df = pd.read_excel("exemple_pandas.xlsx", dtype=dtypes)
    
    # na_values permet de remplacer la donnée manquante par une valeur par défaut
    df = pd.read_excel("exemple_pandas.xlsx", na_values=0)
    
    Python

    Voici le lien vers la documentation pour plus de détails. Il existe encore bien d’autres arguments que je n’ai pas cités ici. Globalement, cette librairie permet de faire énormément de choses et sera très utile pour travailler sur les tableaux. Enfin, nous allons voir maintenant un exemple pour écrire un tableau Pandas dans un fichier Excel en utilisant XlsxWriter.

    import pandas as pd
    
    # Création d'un "dataframe" avec des données arbitraires
    df = pd.DataFrame([5, 8, 6, 17, 35, 29, 9])
    
    # Création d'une passerelle entre Pandas et Xlsxwriter
    with pd.ExcelWriter('pandas_xlsxwriter.xlsx', engine='xlsxwriter') as writer:
    
        # Ecriture des données dans le fichier Excel
        df.to_excel(writer, sheet_name='Sheet1')
        
        # On récupère l'objet "classeur" de la passerelle 
        # ainsi que la feuille de travail
        workbook  = writer.book
        worksheet = writer.sheets['Sheet1']
        
        # Création d'un graphique
        chart = workbook.add_chart({'type': 'column'})
        
        # Configuration du graphique à partir des données écrites
        chart.add_series({'values': '=Sheet1!$B$2:$B$8'})
        
        # Insertion du graphique
        worksheet.insert_chart('D2', chart)
        
    Python

    Voici le résultat du programme, un tableau avec les valeurs de celui-ci et un graphique en barres qui représente les données.

    Ecrire un tableau pandas dans un fichier excel avec la libraire XlsxWriter en python

    Conclusion

    XlsxWriter est une bibliothèque Python très utile pour créer des fichiers Excel avec des fonctionnalités avancées comme la création de graphiques. Avec ses options de mise en forme, elle permet de produire des fichiers Excel de qualité professionnelle et cela de manière complètement automatisée. La bibliothèque est bien documentée (voici le lien) et dispose de beaucoup d’exemples sur lesquels vous pourrez vous appuyer. Si vous cherchez à créer des fichiers Excel avec Python, XlsxWriter est donc un excellent choix.

    Egalement, nous avons vu comment combiner la librairie Pandas avec XlsxWriter. Cela pourra vous être utile lorsque vous travaillerez avec de grandes bases de données et que vous souhaiterez sortir des graphiques. Ceux-ci seront plus facilement partageables avec vos collègues.

    Enfin, il est possible avec la librairie XlsxWriter d’aller beaucoup plus loin avec Excel. Notamment avec l’ajout automatique de macros à l’intérieur du fichier. Ceci n’est qu’un point parmi toutes les autres possibilités. Il serait trop long de tout détaillé ici. Néanmoins, si un sujet vous intéresse, n’hésitez pas à laisser un commentaire et j’y répondrai avec plaisir.

    A bientôt,
    Benjamin

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire

    Récupérez votre guide pour débuter en Python. Je vous offre plus de 80 pages pour partir sur de bonnes bases !