erstellen von Microsoft Excel Mappen mit Python3 und XlsxWriter

In diesem Beitrag möchte ich dir zeigen wie einfach es ist mit Python3 und der Bibliothek Xlsxwriter eine Microsoft Excel Mappe zu erstellen.

Für ein aktuelles Projekt mit Python3 habe ich ein gutes und vor allem einfaches Framework gesucht um eine Microsoft Excel Mappe in Python zu generieren. Mein hauptaugenmerk lag dabei darauf das dieses einfach zu verwenden ist und dabei bin ich an dem Xlsxwriter hängen geblieben.

Die offizielle Dokumentation zu dieser Bibliothek findest du unter https://xlsxwriter.readthedocs.io/ und den Download der Bibliothek unter https://github.com/jmcnamara/XlsxWriter, jedoch ist die Dokumentation nur in englischer Sprache verfügbar.

Installation & Konfiguration

Da ich zum schreiben meiner Skripte / Programme Anaconda verwende brauchte ich diese Bibliothek nicht extra installieren, wenn du jedoch Python3 in einem anderen Editor verwendest so musst du diese Bibliothek ggf. vorher installieren.

Um die Bibliothek XlsxWriter zu installieren, öffnen wir die Kommandozeile und geben den Befehl:

pip install XlsxWriter

ein und bestätigen dieses mit der Enter Taste.

Es wird nun das Paket aus dem Internet geladen und installiert.

Installieren von der Bibliothek XlsxWriter auf der Kommandozeile
Installieren von der Bibliothek XlsxWriter auf der Kommandozeile

Die Warnung dass, das Tool pip in einer alten Version installiert ist, können wir in diesem Schritt außer Acht lassen.

Testen der Installation

Um nun die erfolgreiche Installation zu testen öffnen wir den Python Prompt mit der Eingabe von „python“ und geben den Importbefehl „import xlsxwriter“ ein. 

testen der Installation von XlsxWriter mit dem Importbefehl
testen der Installation von XlsxWriter mit dem Importbefehl

Wenn die Installation erfolgreich war dann solltest du hier keine Fehlermeldung sehen!

Beispiele

Nachdem nun die Bibliothek installiert ist können wir mit der Erstellung unseres ersten Skriptes beginnen. Zunächst importieren wir uns das Modul „xlsxwriter“ in unser Skript.

import xlsxwriter

Beispiel 1 – erstellen einer Mappe

Damit wir Danten in eine Tabelle schreiben können müssen wir zunächst eine Microsoft Excel Mappe erstellen.

import xlsxwriter

#erstellen eines Workbook Objektes mit dem Dateinamen "testMappe.xlsx"
workbook = xlsxwriter.Workbook('testMappe.xlsx')

#erstellen eines Tabellenblattes in dem Workbook Objekt
#der Name ist dann "Sheet1"
worksheet1 = workbook.add_worksheet()

#alternativ kann der Name des Tabellenblattes als
#Parameter übergeben werden.
worksheet2 = workbook.add_worksheet('Tabellenname')

#schließen des Workbooks
workbook.close()

Wichtig ist dass, das Workbook Objekt am Ende geschlossen wird, denn erst dann werden die Daten final in die Datei geschrieben.

Beispiel 2 – schreiben von Daten in eine Tabelle

In unserem Worksheet können wir nun Daten in eine bestimmte Zelle schreiben. Die Zelle beginnt beim Buchstaben „A“ und endet mit „XFD“. Wir können maximal 1048576 Zeilen pro Tabellenblatt schreiben. 

import xlsxwriter

#erstellen eines Workbook Objektes mit dem Dateinamen "testMappe.xlsx"
workbook = xlsxwriter.Workbook('testMappe.xlsx')

#erstellen eines Tabellenblattes mit dem
#Namen "Tabellenname"
worksheet = workbook.add_worksheet('Tabellenname')

worksheet.write('A1', 'Vorname')
worksheet.write('B1', 'Name')

#schließen des Workbooks
workbook.close()

Das Ergebnis ist, das wir eine Datei mit dem Namen „testMappe.xlsx“ und in dieser ein Tabellenblatt mit dem Namen „Tabellenname“ erzeugt haben. Des Weiteren haben wir in die Zellen „A1“ den Wert „Vorname“ sowie in die Zelle „B1“  Name geschrieben.

Excel Mappe mit Tabellenüberschriften
Excel Mappe mit Tabellenüberschriften

Schreiben wir uns eine Mehrdimensionale Liste mit Vornamen & Nachnamen und befüllen damit die Tabelle.

import xlsxwriter

#erstellen eines Workbook Objektes mit dem Dateinamen "testMappe.xlsx"
workbook = xlsxwriter.Workbook('testMappe.xlsx')

#erstellen eines Tabellenblattes mit dem
#Namen "Tabellenname"
worksheet = workbook.add_worksheet('Tabellenname')

worksheet.write('A1', 'Vorname')
worksheet.write('B1', 'Name')

#eine Mehrdimensionale Liste mit Namen
namen = [['Max', 'Mustermann'],['Erika', 'Müller'], ['Andi', 'Wand']]

#Variable zum speichern der aktuellen Zeile
rows = 2
#For-Schleife über die Namen
for vorname, name in namen:
    #schreiben des Vornamens
    worksheet.write('A'+str(rows), vorname)
    #schreiben des Nachnamens
    worksheet.write('B'+str(rows), name)
    #incrementieren der Zeilennummer
    rows = rows + 1

#schließen des Workbooks
workbook.close()

Beispiel 3 – Zellenformatierungen

Wir können an der bereits bekannten Funktion „write“ neben der Zelle und dem Text auch ein zusätzlichen, optionalen Parameter für die Zellenformatierung übergeben.

Zunächst definieren wir uns ein einfaches Objekt mit der Zellenformatierung für den Hintergrund.

oddCellFormat = workbook.add_format()
oddCellFormat.set_bg_color('#d4ddcf')

evenCellFormat = workbook.add_format()
evenCellFormat.set_bg_color('#bec6ba')

In der offiziellen Dokumentation zu XlsxWriter findest du eine gesamte Auflistung aller Formatierungsmöglichkeiten.

eingefärbte Zeilen in Excel
eingefärbte Zeilen in Excel
import xlsxwriter

#erstellen eines Workbook Objektes mit dem Dateinamen "testMappe.xlsx"
workbook = xlsxwriter.Workbook('testMappe.xlsx')

#erstellen eines Tabellenblattes mit dem
#Namen "Tabellenname"
worksheet = workbook.add_worksheet('Tabellenname')

oddCellFormat = workbook.add_format()
oddCellFormat.set_bg_color('#d4ddcf')

evenCellFormat = workbook.add_format()
evenCellFormat.set_bg_color('#bec6ba')
    
worksheet.write('A1', 'Vorname')
worksheet.write('B1', 'Name')

#eine Mehrdimensionale Liste mit Namen
namen = [['Max', 'Mustermann'],['Erika', 'Müller'], ['Andi', 'Wand']]

#Variable zum speichern der aktuellen Zeile
rows = 2
#For-Schleife über die Namen
for vorname, name in namen:
    #zuweisen der Formatierung für Zeilen welche eine Ungerade Zeilenzahl haben
    cellFormat = oddCellFormat
    #prüfen ob die Zeilenzahl gerade ist
    #Die Funktion Modulo liefert eine Zahl größer 0 wenn die Zeile ungerade ist.
    if((rows % 2) == 0):
        #zuweisen des Zellenformates für gerade Zeilen
        cellFormat = evenCellFormat
    #schreiben des Vornamens sowie setzen des Zellenformates
    worksheet.write('A'+str(rows), vorname, cellFormat)
    #schreiben des Nachnamens sowie setzen des Zellenformates
    worksheet.write('B'+str(rows), name, cellFormat)
    #incrementieren der Zeilennummer
    rows = rows + 1

#schließen des Workbooks
workbook.close()

Beispiel 4 – Diagramme

Eine große Stärke von Python ist die Verarbeitung von sehr großen Datenmengen und das Visualisieren von diesen Daten können wir zbsp. auch mit Diagrammen machen.

Als erstes erzeugen wir ein einfaches Liniendiagramm, hierzu habe ich eine mehrdimensionale Liste mit Städten und deren Einwohnerzahlen erstellt.

#eine Mehrdimensionale Liste mit Namen zu Städten und deren Einwohnerzahlen
staedte = [['Stendal', 41567],['Braunschweig', 248292], ['Helmstedt', 91307]]

Diese Werte schreiben wir zunächst in die Tabelle.  Danach können wir unser Diagramm auf diese Werte verweisen ein Styling festlegen und positionieren.

#erzeugen eines Liniendiagrammes
chart = workbook.add_chart({'type': 'line'})
#setzten des Titels
chart.set_title({ 'name': 'Einwohner pro Stadt'})
#zuweisen der Werte
chart.add_series({'values': '=Tabellenname!$B$2:$B$4', 
                #die Beschriftungen
                  'categories':'=Tabellenname!$A$2:$A$4',
                #der Style der Linie definieren
                   'line': {
                       #Farbe rot
                        'color': 'red',
                       #Stärke 1
                        'width': 1,
                }})

#positionieren des Diagramms an der Zelle A7
worksheet.insert_chart('A7', chart)

Das Ergebnis ist ein Tabellenblatt mit einer Datentabelle sowie einem Liniendiagramm.

Python3 XlsxWriter - Tabellenblatt mit Datentabelle und Liniendiagramm
Python3 XlsxWriter – Tabellenblatt mit Datentabelle und Liniendiagramm

Das gesamte Skript / Programm:

import xlsxwriter

#erstellen eines Workbook Objektes mit dem Dateinamen "testChartMappe.xlsx"
workbook = xlsxwriter.Workbook('testChartMappe.xlsx')

#erstellen eines Tabellenblattes mit dem
#Namen "Tabellenname"
worksheet = workbook.add_worksheet('Tabellenname')

oddCellFormat = workbook.add_format()
oddCellFormat.set_bg_color('#d4ddcf')

evenCellFormat = workbook.add_format()
evenCellFormat.set_bg_color('#bec6ba')
    
worksheet.write('A1', 'Stadt')
worksheet.write('B1', 'Einwohner')

#eine Mehrdimensionale Liste mit Namen zu Städten und deren Einwohnerzahlen
staedte = [['Stendal', 41567],['Braunschweig', 248292], ['Helmstedt', 91307]]

#Variable zum speichern der aktuellen Zeile
rows = 2
#For-Schleife über die Namen
for stadt, einwohner in staedte:
    #zuweisen der Formatierung für Zeilen welche eine Ungerade Zeilenzahl haben
    cellFormat = oddCellFormat
    #prüfen ob die Zeilenzahl gerade ist
    #Die Funktion Modulo liefert eine Zahl größer 0 wenn die Zeile ungerade ist.
    if((rows % 2) == 0):
        #zuweisen des Zellenformates für gerade Zeilen
        cellFormat = evenCellFormat
    #schreiben des Vornamens sowie setzen des Zellenformates
    worksheet.write('A'+str(rows), stadt, cellFormat)
    #schreiben des Nachnamens sowie setzen des Zellenformates
    worksheet.write('B'+str(rows), int(einwohner), cellFormat)
    #incrementieren der Zeilennummer
    rows = rows + 1

#erzeugen eines Liniendiagrammes
chart = workbook.add_chart({'type': 'line'})
#setzten des Titels
chart.set_title({ 'name': 'Einwohner pro Stadt'})
#zuweisen der Werte
chart.add_series({'values': '=Tabellenname!$B$2:$B$4', 
                #die Beschriftungen
                  'categories':'=Tabellenname!$A$2:$A$4',
                #der Style der Linie definieren
                   'line': {
                       #Farbe rot
                        'color': 'red',
                       #Stärke 1
                        'width': 1,
                }})

#positionieren des Diagramms an der Zelle A7
worksheet.insert_chart('A7', chart)

#schließen des Workbooks
workbook.close()

Hinweis: Die Werte der Einwohnerzahlen müssen als Zahlenwerte geschrieben werden da ein Diagramm aus Textwerten nicht erstellt werden kann!

Ausblick & Abschluß

Die hier gezeigten Beispiele zeigen einige wenige Funktionen der Bibliothek XlsxWriter. In der offiziellen Dokumentation findest du noch viele weitere Funktionen um deine Datentabelle oder Diagramm zu Formatieren. Du kannst auch in den Zellen Formeln hinterlegen und so deine Tabelle noch dynamischer gestalten aber dazu werde ich in einem weiteren Beitrag näher eingehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.