Mit Features überladene Tabellenkalkulationen gibt es zur Genüge. Dass eine ausgefeilte Spreadsheat-Anwendung auch einsteigertauglich sein kann, demonstriert das auf Python basierende Pyspread.
Seit Beginn der elektronischen Datenverarbeitung zählt die Tabellenkalkulation als separate und häufig genutzte Anwendung zu den Standardprogrammen für den Büroalltag. Das hier im Mittelpunkt stehende Pyspread [1] steht daher in einer direkten Linie mit den größeren und bekannteren Vertretern der Gattung, wie Gnumeric, Kspread/Calligra Sheets , Calc von Libre- und OpenOffice sowie PlanMaker aus dem kommerziellen Paket SoftMaker Office.
Aus der Masse der Konkurrenz hebt sich Pyspread deswegen wohltuend ab, weil es nicht überladen wirkt und somit auch für Einsteiger handhabbar bleibt (Abbildung 1). Es umfasst alle grundlegenden Mechanismen, um tabellenbasiert zu arbeiten und die entsprechenden Berechnungen auszuführen. Weiterhin sticht hervor, dass es für Formeln und Auswertungen innerhalb des Rechenblatts statt einer eigenen Makrosprache eine vorhandene Skriptsprache verwendet. Damit folgt Pyspread einem ähnlichen Ansatz wie Calc aus Siag Office, setzt jedoch auf das populäre Python statt auf das bei Siag bevorzugte Scheme.
Das selbst in Python geschriebene Pyspread fasst dabei eine größere Auswahl an Sprachkonstrukten und Schreibweisen mit speziellem Bezug auf eine Tabellenkalkulation zusammen. Damit kann der Interpreter Berechnungsformeln innerhalb einer annehmbaren Zeitspanne vollständig verarbeiten und das Ergebnis zeitnah als Wert oder Grafik darstellen.
Das Ausführen der Skripting-Inhalte müssen Sie vorab explizit aktivieren und mit einem GnuPG-Schlüssel kryptografisch absichern. Letzteres begrenzt das unbeabsichtigte Ausführen von Python-basiertem Schadcode, der sich möglicherweise als harmlose Formel im Rechenblatt verbirgt.
Veröffentlichung und Entwicklungsziel
Das unter der GPLv3 lizenzierte Pyspread findet sich in den Software-Archiven aller gängigen Distributionen. Genügt Ihnen die derzeit als stabil deklarierte Version 0.3.3 (Debian 8, Ubuntu 15.10) nicht, weichen Sie auf die Version 1.0 von der Webseite des Projekts oder auf die Entwicklerversion [2] aus. Für die ersten Schritte genügt jedoch auch die Version 0.3 beziehungsweise die bereits in LU 03/2015 angerissene Version 0.4 [3], die beispielsweise für Arch Linux und Slackware zur Verfügung steht. Version 1.0 hat im Wesentlichen nur ein paar Knöpfe mehr, beispielsweise für den direkten PDF-Export.
Pyspread wirkt aufgrund seiner grafischen Benutzeroberfläche auf Basis von Gnome/GTK recht einsteigertauglich. Sobald Sie es verwenden, werden Sie jedoch bald bemerken, dass die Entwickler auch die Vorlieben und Denkweisen von Technikern bei der Bedienung berücksichtigt haben. Das Team um Martin Manns hat es sich als Ziel gesetzt, das “most pythonic spreadsheet” zu erstellen.
Dabei gibt jede Zelle ein einzelnes Python-Objekt zurück, das sich von anderen Zellen aus referenzieren lässt. Diese Objekte dürfen neben Python-Ausdrücken auch Zeichenketten, Ganz- und Gleitkommazahlen sowie Listen und Matrizen beinhalten. Das ermöglicht ein Andocken an die Bibliothek Numpy [4] für Vektoren und Matrizen sowie grafische Darstellungen mithilfe von Matplotlib [5]. Sofern Sie damit vertraut sind, können Sie Ihr bereits erlerntes Python-Wissen direkt einbringen.
Programmaufbau
Die Anordnung der Komponenten in Pyspread folgt dem klassischen Schema für Tabellenkalkulationen. Im Zentrum steht das Rechenblatt mit einzelnen Zeilen und Spalten. Darüber thront eine kombinierte Menü- und Werkzeugleiste plus Eingabezeile. Sie ändern die Zelleninhalte direkt oder über die Eingabezeile.
Die einzelnen Schalter erlauben einen direkten Zugriff auf die Dateioperationen, das Gestalten von Text und Tabellenzellen (Schriftart, Farbe, Größe, Hintergrund, Umrandung) sowie das Drehen und Ausrichten der Zelleninhalte. Weiterhin sind das Sortieren von Zellen und das Suchen und Ersetzen vorbereitet, auch unabhängig von Groß- und Kleinschreibung sowie insbesondere anhand regulärer Ausdrücke.
Beim Datenaustausch beherrscht Pyspread den Export als kommaseparierte Werte (CSV) und – ab Version 1.x – auch als SVG und PDF. Ein Im- und Export für ältere Microsoft Excel-Daten gelingt auf der Basis von der Bibliothek Xlrd/Xlwt [6]. Für das Darstellen von Diagrammen sowie die Datenvisualisierung kommt die Matplotlib zum Einsatz, die Integration von Bilddaten erfolgt über die Bibliothek des Wx-Frameworks [7].
Abbildung 1 zeigt einen Ausschnitt eines elektronischen Fahrtenbuchs mit fünf Spalten: Anzahl für die Häufigkeit der zurückgelegten Strecke, von für den Startort, nach als Fahrtziel sowie die Einzel- und Gesamtdistanz. Darunter sehen Sie die Summe der aufgelaufenen Kilometer. Die Balkengrafik rechts daneben visualisiert die Verhältnisse der Distanzen. Ändern Sie die Werte in den zugrundeliegenden Tabellenzellen, berechnet Pyspread die Formeln erneut und aktualisiert die Darstellung in den Ergebniszellen sowie der Grafik.
Formeln und Referenzen auf einzelne Zellen
Als Grundlage aller Berechnungen in Pyspread dient ein dreidimensionaler Referenzvektor S. Er besteht aus den Werten für die jeweilige Zeile, Spalte und der Nummer des Rechenblatts. Als Trennzeichen zwischen den einzelnen Werten dient das Komma, alle Indizes verwenden als Basis null.
Dabei lassen sich sowohl relative als auch absolute Angaben zur Zelle vornehmen. Für relative Referenzen stehen die Variablen X, Y und Z zur Verfügung. Sie beinhalten die aktuelle Zeile und Spalte sowie die Nummer des Rechenblatts. Die Zelle in der nächsten Zeile desselben Rechenblatts sprechen Sie mit der Schreibweise S[X+1,Y,Z] an.
Das Fahrtenbuch-Beispiel verwendet absolute Angaben. Um etwa die Kilometeranzahl für die erste Strecke in Zeile 1 zu ermitteln, enthält Spalte 4 die Formel S[1,0,0] * S[1,3,0]. Damit berechnen Sie die Häufigkeit mal Einzeldistanz einer Strecke mit absoluten Referenzen auf eine Zelle. Die Gesamtsumme aller Distanzen entspricht dann einer Summe über mehrere Zellen einer Spalte. Gültige Formeln dafür lauten beispielsweise:
- Variante 1:
sum([S[r,4,0] for r in range(1,6)]) - Variante 2:
sum(S[1:6,4,0])
Variante 1 folgt einem funktionalen Programmieransatz und nutzt die Summenfunktion über die Spalte 4 in Kombination mit einer For-Schleife, die über die Variable r im Wertebereich von 1 bis 6 iteriert. Damit lesen Sie die Inhalte der Zellen in den Zeilen 1 bis 6 aus. Die deutlich kompaktere Variante 2 greift zur Python-typischen Schreibweise für einen Bereich: Die Zeilen 1 bis 6 geben Sie als Zahlenwerte getrennt durch einen Doppelpunkt in der Summenfunktion an. Das errechnete Ergebnis ist identisch zu Variante 1 – und häufig für Nichtprogrammierer leichter zu lesen.
Bei sum() handelt es sich nicht um die einzige Funktion aus dem Python-Universum, die Sie verwenden können. Die Tabelle “Pyspread-Standardfunktionen (Auswahl)” bietet einen kurzen Überblick der Möglichkeiten. Funktionen aus anderen Python-Modulen binden Sie über eine Zuweisung nach folgendem Schema ein:
Variable = __import__("Modul")
Nach dieser Zuweisung steht die entsprechende Funktion aus Modul für alle Zellen Ihres Rechenblatts zur Verfügung.
Pyspread-Standardfunktionen (Auswahl)
| Funktion | Ergebnis |
|---|---|
abs() |
absoluter Zahlenwert |
all() |
true, falls kein Element einer Liste leer |
any() |
true, falls mindestens ein Element einer Liste leer |
max() |
größter Wert einer Liste |
min() |
kleinster Wert einer Liste |
pow() |
Potenz eines Werts |
round() |
gerundeter Zahlenwert |
sum() |
Summe einer Liste |
Diagramme erstellen und einbinden
Diagramme verdeutlichen die Zusammenhänge zwischen Zahlenwerten. Pyspread versteckt seine Diagrammfunktionen hinter dem unscheinbaren Schalter mit den beiden farbigen Diagrammlinien. Zum Erstellen der Grafiken bedient es sich der bereits erwähnten Funktionsbibliothek Mathplotlib.
Ein Klick auf das Symbol öffnet ein Dialogfenster zur Diagrammgestaltung (Abbildung 2) – das links die Einstellungen für Beschriftungen und Skalen enthält, in der Mitte jene für Diagrammdaten (Werte) und rechts eine Vorschau des resultierenden Diagramms. Allerdings wurde dieses Dialogfeld für sehr große Bildschirme konzipiert. Zwar lässt es sich vergrößern und die Spaltenbreiten dynamisch an die Größe des Fensters anpassen, doch auf einem kleineren Bildschirm sehen Sie dennoch kaum etwas. Das betrifft insbesondere die mittlere Spalte, in der Sie den Datenbereich für das Diagramm eingeben (möchten). Erst einmal müssen Sie zu den Eingabefeldern kommen – und das gelang im Test nur, indem wir das Fenster massiv vergrößerten.
Das Fazit für den Punkt “Diagramme” lautet daher: etwas hakelig. Die vorliegenden Ergebnisse entstanden als Resultat stoischen Herumprobierens, da die Dokumentation hier nicht weiterhilft – es gibt zu diesem Punkt schlicht keine ?, aber auch die Kontext-Hilfe zu vielen Eingabefeldern unbrauchbar ist.
Abgesehen von den eigensinnigen Spaltenbreiten bleibt unklar, was in welche Eingabefelder für das Diagramm gehört – Einzelwerte oder Listen? – und insbesondere, in welcher Form man diese angeben muss. Die oben gepriesene Bereichsschreibweise funktioniert hier nicht, dafür aber eine Menge mit Einzelwerten der Form (Wert1, Wert2, ...). Ein Bezug auf einzelne Zellen gelingt unter Verwenden des Referenzvektors S, beispielsweise S[1,2,3] für die zweite Zeile, dritte Spalte im vierten Rechenblatt.
Dokumente absichern
Öffnen Sie ein zuvor gespeichertes Pyspread-Dokument wieder, interpretiert die Anwendung die enthaltenen Formeln nicht automatisch. Der Hintergrund dafür ist ein Sicherheitsmechanismus, der das Ausführen potenziellen Schadcodes verhindern soll – jedes Python-Schnipsel könnte ja im Prinzip Schlimmes im System anrichten.
Pyspread kann nicht von sich aus erkennen, was der im Rechenblatt enthaltene Programmcode für Seiteneffekte hat, insbesondere solcher aus externen Modulen. Sind Sie sicher, dass die enthaltenen Python-Schnipsel keinen Schaden anrichten, aktivieren Sie deren Interpretation über den Menüpunkt Datei | Datei bestätigen.
Um diesen Schritt in der Zukunft zu automatisieren, bittet Sie Pyspread um Ihren GnuPG-Schlüssel [8]. Damit signiert es die Pyspread-Dateien. Nicht nur Sie als Benutzer können nun vor dem Öffnen des Rechenblatts über den GnuPG-Schlüssel prüfen, ob das Dokument aus einer vertrauenswürdigen Quelle stammt.
Listing 1 zeigt den Fingerabdruck des GnuPG-Schlüssels des Autors [9]. Diesen Fingerabdruck hinterlegt Pyspread zudem in seinen Einstellungen (Abbildung 3). Den zugehörigen Dialog finden Sie im Menü unter Datei | Einstellungen, den Eintrag zum Fingerabdruck im untersten Eingabefeld.
Listing 1
$ gpg --fingerprint D431AC07 pub 4096R/D431AC07 2014-09-05 Schl.-Fingerabdruck = 35F8 DF9C 884E 36AB 9744 60AF CFA7 2978 D431 AC07 uid Frank Hofmann (Hofmann EDV) <frank.hofmann@efho.de> sub 4096R/3B074F29 2014-09-05
Fazit
Die Idee, eine Tabellenkalkulation mit einer bestehenden, ausgereiften Programmiersprache elegant zu verbinden, ist clever überlegt. Gleiches gilt für den Einsatz einer GnuPG-Signatur, die das Vertrauen in die übermittelten Dokumente verstärkt. Diese Kombination bieten die großen Platzhirsche bislang nicht.
Pyspread verfügt über ausgereifte Grundfunktionen, die ein Arbeiten mit dem Programm sehr angenehm machen. Als größere Baustellen stechen noch die Diagrammerstellung und die Dokumentation ins Auge – hier bleibt reichlich Spielraum nach oben. Ein guter Grund, Pyspread auch in Zukunft im Auge zu behalten.
Danksagung
Der Autor bedankt sich bei Martin Manns für seine flinke Hilfe zu Pyspread im Vorfeld dieses Artikels.
Der Autor
Frank Hofmann arbeitet in Berlin im Büro 2.0 (http://www.efho.de), einem Open-Source-Expertennetzwerk, als Dienstleister mit Spezialisierung auf Druck und Satz. Er koordiniert seit 2008 das Regionaltreffen der LUGs der Region Berlin-Brandenburg und ist Koautor des Debian-Paketmanagement-Buchs (http://www.dpmb.org).
Infos
[1] Pyspread: http://manns.github.io/pyspread/
[2] Debian-Pyspread-Paket (Entwicklerversion): https://packages.debian.org/de/sid/pyspread
[3] Pyspread 0.40: Uwe Vollbracht, “Angetestet”, LU 03/2015, S. 6, https://www.linux-community.de/34329
[4] Numpy: http://www.numpy.org
[5] Matplotlib: http://matplotlib.org
[6] “Working with Excel Files in Python”: http://www.python-excel.org
[7] Python-Wx-Bibliothek: http://www.wxpython.org
[8] GnuPG: https://gnupg.org
[9] Mailverschlüsselung mit GnuPG: René Gäbler, “Schlüsselerlebnis”, LU 11/2007, S. 42, https://www.linux-community.de/14307








