Excel ist ein Tabellenkalkulationsprogramm und gehört zur Microsoft-Office-Suite. Naja, es gibt wohl kaum jemanden, der dieses Programm nicht kennt. Weil es so gebräuchlich ist, wollen wir in diesem Artikel zeigen, wie man von Python aus Excel-Dokumente bequem bearbeiten kann.
Wir wollen eine Excel-Datei mit einer Aufstellung der Länder der Erde mit ihren Hauptstädten verwenden. Wir haben diese hier unter dem Namen Capital_Cities bereitgestellt. Um sich diese Datei anzuschauen benötigt man zum Beispiel ein installiertes OpenOffice, Microsoft-Office oder ein LibreOffice.

Unter OpenOffice zeigt sich dann folgendes Bild:

Bild 1 excel_capital_cities

Bild 1 excel_capital_cities

Um mit excel-Dateien arbeiten zu können benötigt man die Module xlrd und xlwt. Sie gehören nicht zur Standardinstallation von Python und müssen nachinstalliert werden. Unter Ubuntu, Debian oder Mint kann dies beispielsweise mit folgenden Kommandos in einer Shell erfolgen:

sudo apt-get install python-xlrd
sudo apt-get install python-xlwt

(Anmerkung: Als Alternative bietet sich noch das Modul pyExcelerator an.)

Wir zeigen nun in der interaktiven Python-Shell, wie man mit xlrd arbeitet. (Funktioniert leider nicht unter Python3):

Laden des xlrd-Modules:

>>> import xlrd

Mit der xlrd-Methode open_workbook() erzeugen wir ein Handle, mit dem wir auf die Excel-Datei im folgenden zugreifen kännen:

>>> wb = xlrd.open_workbook("Capital_Cities.xls")

Mit der folgenden Methode können wir uns die in der Datei vorhanden Arbeitsblätter (sheets) anschauen:

>>> wb.sheet_names()
[u'Sheet1']
>>>

Wir sehen, dass es in unserer Excel-Datei nur ein Arbeitsblatt gibt. Generell gibt zwei Möglichkeiten auf die Arbeitsblätter zuzugreifen: Entweder über den Namen (sheet_by_name()) oder über den Index (sheet_by_name()):

>>> sh = wb.sheet_by_name(u'Sheet1')
>>> sh = wb.sheet_by_index(0)

Egal welche Methode des Zugriffes wir eben gewählt haben, wir sind nun in der Lage zum Beispiel über die Zeilen der Tabelle zu iterieren. Dabei erzeugen wir eine Liste „rows“ mit den Zeilen der Excel-Tabelle. Jede Zeile wird dabei als ebenfalls als Liste dargestellt. Existiert ein Feld nicht, enthält die Liste einen leeren String an dieser Stelle:

>>> rows = []
>>> for row_number in xrange(sh.nrows):
...     rows.append(sh.row_values(row_number))
...
>>> for row in rows[:10]:
...     print(row)
...
[u'Afghanistan', u'Kabul', u'Capital', 3572.96]
[u'Albania', u'Tiran\xeb (Tirana)', u'Capital', 432.652]
[u'Algeria', u'El Djaza\xefr  (Algiers)', u'Capital', 2740.07]
[u'American Samoa', u'Pago Pago', u'Capital', 59.905]
[u'Andorra', u'Andorra la Vella', u'Capital', 24.864]
[u'Angola', u'Luanda', u'Capital', 4510.69]
[u'Anguilla', u'The Valley', u'Capital', 1.635]
[u'Antigua and Barbuda', u"St. John's", u'Capital', 26.58]
[u'Argentina', u'Buenos Aires', u'Capital', 12987.8]
[u'Armenia', u'Yerevan', u'Capital', 1110.19]
>>>

Wir können auch direkt auf den Inhalt der Zellen zugreifen. Man beachte jedoch, dass die Zeilenzählung in Excel bei 1 beginnt und in xlrd bei 0. Ebenso unterscheidet sich die Spaltenzählung: In Excel werden Großbuchstaben benutzt, also A, B, C, … und in Python-xlrd haben wir entsprechend Indizes 0, 1, 2, usw.
Im folgenden greifen wir auf die Zellen (A,82) und (B,82) unserer Excel-Datei zu:

>>> sh.cell(81,0)
text:u'Germany'
>>> sh.cell(81,1)
text:u'Berlin'
>>>

Wir sind nun in der Lage auf ganze Zeilen und auf einzelne Zellen zuzugreifen. Wie sieht es mit Spalten aus. Kein Problem. Dazu gibt es die Methode col_values(), die auf Arbeitsblättern (sheets) arbeitet. Man bergibt ihr den Index der auszugebenden Spalte und erhält eine Liste der Spaltenelemente:

>>> row1 = sh.col_values(0)
>>> print(row1[80:90])
[u'Georgia', u'Germany', u'Ghana', u'Gibraltar', u'Greece', u'Greenland',
u'Grenada', u'Guadeloupe', u'Guam', u'Guatemala']

Excel-Dateien mit Python schreiben

Nun wollen wir zeigen, wie man eine Excel-Datei von Python aus schreibt. Dazu benötigt man das Modul xlwt. Wie bei xlrd erzeugt man erst ein Workbook. Dann kann man diesem Workbook mittels der Methode add_sheet() Arbeitsblätter (sheets) hinzufügen. Als Argument erwartet add_sheet den Titel des Arbeitsblattes, also in unserem Fall ‚Fibonacci‘:

import xlwt

w = xlwt.Workbook()
ws = w.add_sheet('Fibonacci')

next = 1
previous = 0
for i in xrange(20):
    ws.write(i, 0, i)
    ws.write(i, 1, next)
    (next, previous) = (next + previous, next)

w.save('fibonacci.xls')

Die erzeugt Excel-Datei sieht wie folgt aus:

Bild 2 fibonacci

Bild 2 fibonacci

Anmerkung: Wenn Sie mehr über Python und die Fibonacci-Zahlen erfahren wollen, empfehle ich Ihnen mein Buch Einführung in Python3 oder in meinem Tutorial das Kapitel über Rekursive Funktionen. Natürlich können Sie auch alles direkt in einem Python-Kurs bei Bodenseo von mir lernen.

zur Frage bzgl. OpenOffice:
Leider gibt es keine Standard-Module unter Python, die das Arbeiten mit OpenOffice calc-Dokumenten ermöglichen. Eine Möglichkeit bieten Dannys‘ Python-Module.

Über weitere Fragen zum Thema freue ich mich sehr!

Ihr

Bernd Klein

Klein, Einführung in Python 3, 2.A.Mehr zum Thema Python 3 lesen Sie im neuen Buch von Bernd Klein Einführung in Python 3.