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.

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
PythonEt 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
PythonCré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
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()
PythonDans 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.

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()
PythonLa 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.

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
PythonSi 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)
PythonVoici 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)
PythonVoici le résultat du programme, un tableau avec les valeurs de celui-ci et un graphique en barres qui représente les données.

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