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.
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.
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.
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.
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.
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.