Python&Excel: openpyxl
Obacht bei max_column und max_row
In der Arbeit muss ich gerade eine Programmieraufgabe lösen, bei der Daten aus mehreren, verschiedenen Excel-Tabellen automatisch verarbeitet werden sollen, und das, wo ich doch eigentlich eine Führungskraft bin...
Egal, mit Python lässt sich diese Aufgabe erstaunlich einfach lösen. Trotz aller Euphorie muss man aber aufpassen, weil in der schönen Welt unendlicher Libraries auch einige Stolpersteine lauern. Daher hier für mich und meine Nachwelt ein Hinweis dazu!
Mit openpyxl steht eine Bibliothek zur Verfügung, die die Arbeit mit Excel-Dateien sehr einfach gestaltet. Nach dem Öffnen steht zunächst ein Arbeitsmappenobjekt zur Verfügung. Die Arbeitsblätter dieser Excel-Arbeitsmappe sind wiederum Objekte. Mit der Methode cell() kann man dann auf die einzelnen Zellen eines Excel-Arbeitsblatts zugreifen. Was aus einer Zelle kommt ist zunächst immer ein String, außer die Zelle ist leer. Ganz- und Fließkommazahlen muss man sich selber machen...
Und ja, in den Kommentaren des Beispielcodes ist ein Typo zu finden: accessible schreib man mit zwei 's'.

Es könnte so einfach sein, ist es aber nicht...
Wenn man prüfen möchte, ob Anwender z.B. Daten außerhalb des zulässigen Bereiches einer Tabelle eingegeben oder versehentlich eine Zeile gelöscht haben (sie sind ja wie Kinder), dann wäre es praktisch das schnell zu erkennen.
Die objektorientierte Programmierung mit Python ist einfach und schlampig. Man könnte z.B. direkt auf das Arbeitsblatt-Attribut max_column zugreifen, um den Wert mit der erwarteten Anzahl Spalten einer Tabelle zu vergleichen. max_column hat jedoch ein Gedächtnis. Wurde irgendwann einmal z.B. die Zelle C:12 verwendet und danach wieder gelöscht, so würde sich das Arbeitsblatt dennoch 3 (=C) als maximale Spalte 'merken'. Um also die aktuelle Größe des Arbeitsbereiches einer Tabelle richtig ermitteln zu können, musste ich eine eigene Funktion schreiben. Mir gefällt die Eleganz mit der man in Python iteriert. Der Abstraktionsgrad der Sprache ist enorm...

Den Code zum Blog gibt es hier: