Startseite
» PC-Tipps
»
Python in Calc über das Makrosystem von LibreOffice ausführen
Python in Calc über das Makrosystem von LibreOffice ausführen
Wenn ein Python-Skript im Terminal ausgeführt wird, aber die in Calc geöffnete Tabelle nicht lesen oder ändern kann, läuft es wahrscheinlich außerhalb von LibreOffice. Ein Calc-Python-Makro muss innerhalb des LibreOffice-Prozesses ausgeführt werden, wo LibreOffice den aktiven Dokumentkontext bereitstellt. Speichern Sie das Skript als Modul in Ihrem Benutzer-Python-Skriptordner, exportieren Sie seine Funktion mit g_exportedScripts`export` und starten Sie es über den Makro-Dialog von Calc.
Dies ist der einfachste Weg für eine kleine Automatisierung, die mit der geöffneten Arbeitsmappe verknüpft ist. Die aktuelle Python-Skripthilfe von LibreOffice beschreibt sowohl In-Process-Makros als auch separat verbundene Python-Skripte; die folgenden Schritte verwenden die In-Process-Methode.
Warum erkennt ein normales Python-Skript die geöffnete Tabelle nicht?
LibreOffice stellt das aktuelle Dokument einem laufenden Python-Makro über die globale Variable `.py` zur Verfügung XSCRIPTCONTEXT. Ein Skript, das mit einem regulären pythonBefehl gestartet wird, ist ein separater Prozess, sodass die globale Variable nicht automatisch verfügbar ist. Es kann zwar mit LibreOffice kommunizieren, dies erfordert jedoch die Einrichtung einer UNO-Verbindung zu einem bereits laufenden Office-Prozess. Führen Sie für ein erstes Makro die Funktion stattdessen innerhalb von LibreOffice aus.
Ein Python-Makro ist eine Funktion in einem .pyModul. Das Modul- g_exportedScriptsTupel teilt LibreOffice mit, welche Funktionen in der Makroliste angezeigt werden sollen. Diese Details sind in der Python-Programmierreferenz von LibreOffice dokumentiert .
Wie fügt man ein Python-Makro zu Calc hinzu?
1. Suchen Sie den Benutzer-Python-Skriptordner.
Verwenden Sie den persönlichen Ordner „Meine Makros“, wenn Sie ein Skript benötigen, das in jedem geöffneten LibreOffice-Dokument Ihres Benutzerkontos ausgeführt werden kann. LibreOffice dokumentiert den Ordner unter %APPDATA%\LibreOffice\4\user\Scripts\pythonWindows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux und macOS. Falls die Scripts/pythonOrdner noch nicht existieren, erstellen Sie sie. Die Dokumentation zu den Skriptspeicherorten erklärt auch die anderen Makro-Container: Anwendungsmakros und in ein Dokument eingebettete Makros.
Platzieren Sie das Makromodul im Benutzerordner Scripts/python, damit LibreOffice es unter Meine Makros auflisten kann.
Dokumentmakros werden in einer bestimmten Datei gespeichert und sind nur verfügbar, solange dieses Dokument geöffnet ist. Für ein wiederverwendbares, persönliches Hilfsprogramm ist „Meine Makros“ in der Regel einfacher zu verwalten. Vermeiden Sie es, den anwendungsweiten Makroordner von LibreOffice zu ändern, da hierfür möglicherweise Administratorrechte erforderlich sind.
2. Erstellen und exportieren Sie eine kleine Testfunktion
Öffnen Sie einen einfachen Texteditor, erstellen Sie hello_calc.pyim oben genannten Ordner eine neue Datei und fügen Sie Folgendes hinzu:
Die Funktion ruft das aktuell mit dem Makroaufruf verbundene Dokument ab, wählt dessen erstes Tabellenblatt aus und schreibt eine harmlose Testzeichenfolge in Zelle A1. Die letzte Zeile ist wichtig: Ohne das exportierte Tupel wird die Funktion möglicherweise nicht als ausführbares Makro erkannt. Speichern Sie die Datei als reinen Text mit der .pyDateiendung .txt, nicht als Rich-Text-Dokument oder als Datei mit der Endung .txt .py.txt.
Die exportierte Funktion verwendet XSCRIPTCONTEXT, um auf das geöffnete Dokument zuzugreifen und einen Testwert in Zelle A1 zu schreiben.
LibreOffice stellt XSCRIPTCONTEXTdie Variable dem Makromodul zur Verfügung. Diese Variable wird nicht automatisch an Module weitergegeben, die von Ihrem Code importiert werden. Halten Sie den ersten Test daher in sich abgeschlossen. Wenn Sie später wiederverwendbare Funktionen in andere Module auslagern, beachten Sie die Hinweise von LibreOffice zum Importieren von Python-Modulen .
3. Öffnen Sie eine Calc-Datei und führen Sie die exportierte Funktion aus.
Öffnen Sie eine Test-Tabelle in Calc. Verwenden Sie während der Entwicklung eine Kopie oder eine leere Arbeitsmappe.
Wählen Sie Extras > Makros > Makro ausführen .
Erweitern Sie in der Bibliotheksliste „ Meine Makros“ , wählen Sie das Python-Modul und wählen Sie hello_calcaus den Makronamen aus.
Klicken Sie auf Ausführen .
Dieselbe Funktion kann über die APSO-Erweiterung gestartet werden, die LibreOffice für die Ausführung von Python-Skripten direkt im Prozess empfiehlt und die auch eine Python-Shell bereitstellt. Für den hier beschriebenen grundlegenden Ablauf zum Ausführen eines Makros ist APSO nicht erforderlich.
Wählen Sie unter „Meine Makros“ die exportierte Funktion hello_calc aus und führen Sie sie dann in Calc aus.Ein sichtbarer Wert in A1 bestätigt, dass das Testmakro das Calc-Dokument erreicht und eine Zelle geändert hat.
Was passiert, wenn das Makro fehlt oder scheinbar keine Funktion hat?
Arbeiten Sie diese Prüfungen der Reihe nach durch, anstatt allgemeine Sicherheitseinstellungen zu ändern:
Das Modul wird nicht angezeigt: Prüfen Sie, ob sich die Datei im korrekten Scripts/pythonBenutzerpfad befindet, die .pyDateiendung .md hat und ein korrekt geschriebenes g_exportedScriptsTupel enthält. Öffnen Sie den Makro-Dialog erneut. Falls LibreOffice die neu hinzugefügte Datei weiterhin nicht anzeigt, schließen Sie LibreOffice und starten Sie es neu. Überprüfen Sie es anschließend erneut.
Der Makroname fehlt: Stellen Sie sicher, dass das exportierte Tupel das Funktionsobjekt enthält, zum Beispiel ` (hello_calc,). Das Komma sorgt dafür, dass es sich um ein Python-Tupel mit nur einem Element handelt.
Im Terminal wird nichts angezeigt: Die Ausgabe von `from` print()ist nicht verfügbar, wenn Python-Makros über den Standard-Makrodialog ausgeführt werden. Der obige Test schreibt in Zelle A1, sodass das Ergebnis im Tabellenblatt sichtbar ist. Für interaktives Debugging zeigt die Shell von APSO die Ausgabe an.
Ein Import schlägt fehl: Die Installation eines Pakets für Ihr System-Python garantiert nicht, dass die Python-Laufzeitumgebung von LibreOffice es importieren kann. Das Paket muss im Python-Pfad der Laufzeitumgebung verfügbar sein; die offizielle Importanleitung beschreibt Benutzer- und gemeinsam genutzte Modulpfade. Testen Sie das Makro zunächst ohne optionale Importe.
Es erscheint eine Sicherheitswarnung: Führen Sie nur Skripte aus, die Sie selbst geschrieben oder geprüft und denen Sie vertrauen. Die Makrosicherheit dient dazu, unsicheren Code einzuschränken. Senken Sie daher nicht die globale Sicherheitsstufe, nur um ein Makro in einem unbekannten Dokument auszuführen. Informationen zum Verständnis der Warnung finden Sie in den Makrosicherheitsoptionen von LibreOffice.
Wählen Sie den Ansatz mit externen Prozessen nur dann, wenn Ihre Automatisierung von einem Terminal, einem Scheduler oder einer anderen Anwendung aus gestartet werden muss. LibreOffice erfordert, dass Sie den Office-Prozess über eine Pipe oder einen Socket starten und die Verbindung über die UNO-Bridge herstellen; ein gewöhnliches eigenständiges Skript ist nicht mit einem Calc-Makro innerhalb des Prozesses gleichwertig.
Wie kann man überprüfen, ob das Makro funktioniert hat?
Nach dem Klicken auf „Ausführen“ prüfen Sie Zelle A1 im ersten Tabellenblatt. Sie sollte „Hallo von Python“ enthalten , und die Bearbeitungsleiste sollte denselben Text anzeigen, wenn A1 ausgewählt ist. Bleibt die Zelle unverändert, überprüfen Sie, ob die gewünschte Arbeitsmappe aktiv war und das Makro unter „Meine Makros“ ausgewählt wurde. Sobald dieser einfache Test erfolgreich war, ersetzen Sie den Testtext durch Ihre tatsächliche Berechnung und testen Sie diese mit einer Kopie der Arbeitsmappe, bevor Sie sie auf wichtige Daten anwenden.