Magazine High tech

Django: Exporter vos données sous Excel

Publié le 01 septembre 2010 par Luc

Le format Excel est de fait un standard et beaucoup d'applications permettent de faire des exports et des imports sous ce format. Un de mes clients souhaitait pouvoir importer des données d'une application Django dans un autre logiciel et nécessitait donc pour cela de pouvoir exporter la base de données. Il m'a donc lancé ce défi et comme j'aime rendre mes clients heureux :),  je me suis amusé à créer un outil générique permettant d'exporter les données à la demande depuis le site d'administration de Django. Ainsi est né django_excel_export qui est à présent disponible sous licence LGPL.

Installation

Tout d'abord vous devez télécharger l'application qui est disponible sur BitBucket. 2 possibilités: soit télécharger le fichier zip qui contient la version 0.1, soit cloner le repository Mercurial.

L'application utilise xlwt et est donc être multi-plateforme et ne pas nécessiter l'installation d'Excel. Elle a été testée avec Django 1.2 et Python 2.6 sur Linux et Vista.

Une fois, les codes sources copiés dans un endroit accessible pour votre application, vous devez ajouter 'excel_export' à la liste des applications INSTALLED_APPS dans le settings.py et définir, dans ce même fichier de configuration, une variable EXCEL_EXPORTABLE_APPS en lui affectant un tuple des applications que vous voulez rendre exportable.

Créer un 1er export

Une fois l'installation terminée, vous devriez trouver dans le site d'admin de Django les objets Export de l'application Excel_export. Créons un nouvel objet en lui donnant un nom (qui sera utilisé en tant que nom du fichier Excel) et en définissant la table que nous souhaitons exporter. Un click sur 'Enregistrer et Continuer' pour créer l'objet, suivi d'un click sur le bouton 'Exporter' qui se trouve à droite du nom de l'export devrait entraîner le téléchargement par le navigateur d'un fichier Excel contenant les données se trouvant dans la table choisie.

Améliorer cet export

Par défaut, l'export Excel est brut. On exporte tous les attributs de tous les objets de la table. On peut améliorer ceci en sélectionnant les champs, en définissant un label pour l'entête et en ordonnant les colonnes. Il est aussi possible de faire apparaîtres des données d'un champ de type ForeignKey ou ManyToMany en utilisant la notation double-souligné.

Imaginons par example, que vous souhaitez exporter les données d'une table Ville qui contient une clé primaire vers une table Pays. Dans votre export, vous voulez faire apparaître le nom de la ville et celui du pays. Il faut donc ajouter 2 champs 'colonne': 'name' et 'country__name'.

Il est aussi possible de filtré les lignes à exporter en définissant des conditions sur les colonnes. On pourra ainsi exporter que les villes des pays dont le nom commence par un 'S' en ajoutant un filtre 'commence par' sur la colonne 'country__name' avec la valeur 'S'.

ExcelExport

Créer des exports customisés

Cet outil de configuration est simple mais limité et vous aurez peut être la nécessité de créer vos propres rapports avec des requêtes de base de données plus complexes. django_excel_export peut vous permettre cela.

Vous devez ainsi déclarer une fonction dans le settings.py pour la rendre accessible par l'outil d'export.

EXCEL_REPORT_VIEWS = (
('app1.exports.my_export_function', 'MyExport')
)

et ensuite implémenter une fonction qui retournera les données sous la forme d'une liste de liste dont chacune correspond à une ligne du fichier Excel. Attentin la 1ère liste correspond à l'entête.

def my_export_function():
return [
#chaque liste est une ligne de la feuille Excel
['A', 'B', 'C'], #la 1ere est l'entete
[1, 2, 3],
[4, 5, 6],
]

Dans le site d'admin Django, vous devriez voir apparaître un champ Report pour l'export permettant de générer l'export correspondant à la fonction donnée.

Conclusion

Cette application, qui j'espère vous sera utile, est disponible sous license LGPL sur BitBucket. N'hésitez pas à apporter vos commentaires, améliorations ou idées. Si vous êtes intéressé par la génération de fichier Excel en Python, je vous recommande l'utilisation du module xlwt que django_excel_export utilise et si besoin la lecture de cet article sur le blog.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Luc 11 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog