Créer une feuille Excel avec Python et xlwt

Publié le 12 mai 2010 par Luc

Il y a quelques semaines je vous avais présenté xlrd qui permet de lire les données d'un fichier Excel en Python. Je vous propose aujourd'hui de parler de son pendant xlwt pour générer un fichier au format Excel et ce sans la nécessité de posséder un logiciel de bureautique installé.

xlwt est disponible sur Pypi, le site internet qui liste les modules Python publiés, en version 0.7.2. Il est installable très facilement en particulier via la commande easy_install.

Un fichier Excel est un classeur qui contient des feuilles. Il faut donc avec xlwt créer un classeur (workbook) et lui ajouter des feuilles de calcul (worksheet).

   import xlwt
   wb = xlwt.Workbook()
   ws = wb.add_sheet("Ma feuille")

Une feuille contient des cellules dont on peut modifier la valeur simplement:

   ligne, col = 0, 0
   ws.write(ligne, col, "Une valeur")
   for i in xrange(10):
   ws.write(i, 1, i)

Le principal intérêt de xlwt, par rapport au fait de générer du contenu CSV qui pourrait lui aussi être ouvert avec Excel, est la possibilité de créer des formules ainsi que de définir des styles de mise en forme.

   ws.write(10, 1, xlwt.Formula('SUM(B1:B10)'))

easyxf permet de créer un objet style en fonction d'une chaîne de caractères. C'est un raccourci bien pratique.

   style = xlwt.easyxf("font: bold 1; pattern: pattern solid, fore-colour light_orange; ")
   ws.write(1, 0, 'Texte en gras sur fond orange', style)

Autre intérêt, xlwt permet de protéger une feuille Excel et de ne laisser que certaines cellules modifiables. On passe la alors par un style pour définir le niveau de protection des cellules avant de verrouiller la feuille. Par défaut, les cellules qui n'ont pas été déverrouillées ne seront pas modifiables:

   style = xlwt.easyxf("protection: cell_locked 0; ")
   ws.write(2, 0, 'Modifiable', style)
   ws.protect = True

Une petite subtilité, xlwt ne permet pas d'affecter 2 fois une valeur à une cellule:

    try:
        ws.write(2, 0, 'Une autre valeur modifiable', style)
    except Exception, msg:
        print msg

Voila, il ne reste plus qu'à enregistrer le classeur et à verifier le résultat:

   wb.save('genere-par-python.xls')

xlwt est multi-plateforme et ne nécessite pas d'avoir Excel ou OpenOffice installé. Cela peut-être très utile par exemple pour générer des feuilles Excel dans une application Internet.

Cet article ne présente que les notions de base. Malheureusement la documentation de xlwt n'est pas très complète et il faut parfois bidouiller un peu. Je vous conseille de jeter un oeil aux exemples qui sont une bonne source d'inspiration.