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.

Eine Python-Datei namens hello_calc.py im Benutzerordner Scripts/python von LibreOffice.
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:

def hello_calc(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets[0]
    sheet.getCellRangeByName("A1").setString("Hello from Python")

g_exportedScripts = (hello_calc,)

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.

Python-Makrocode, der XSCRIPTCONTEXT verwendet und hello_calc in g_exportedScripts auflistet
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.

  1. Öffnen Sie eine Test-Tabelle in Calc. Verwenden Sie während der Entwicklung eine Kopie oder eine leere Arbeitsmappe.
  2. Wählen Sie Extras > Makros > Makro ausführen .
  3. Erweitern Sie in der Bibliotheksliste „ Meine Makros“ , wählen Sie das Python-Modul und wählen Sie hello_calcaus den Makronamen aus.
  4. 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.

LibreOffice-Makroauswahl mit hervorgehobenem Makro „hello_calc“ unter „Meine Makros“ und sichtbarer Schaltfläche „Ausführen“.
Wählen Sie unter „Meine Makros“ die exportierte Funktion hello_calc aus und führen Sie sie dann in Calc aus.
LibreOffice Calc zeigt „Hallo von Python“ in der ausgewählten Zelle A1 an
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.

Einen Kommentar hinterlassen

Schützen Sie ausgewählten Writer-Text mit einem Abschnittspasswort

Schützen Sie ausgewählten Writer-Text mit einem Abschnittspasswort

Einen bestimmten Abschnitt vor routinemäßigen Bearbeitungen zu schützen und gleichzeitig den Rest eines Writer-Dokuments nutzbar zu halten, und zu erfahren, wann die Dateiverschlüsselung die bessere Wahl ist.

Tabellenkalkulationstext im Dunkelmodus von LibreOffice Calc lesbar machen

Tabellenkalkulationstext im Dunkelmodus von LibreOffice Calc lesbar machen

Verbessern Sie die Lesbarkeit von Tabellenkalkulationstexten, indem Sie in Calc das Design, die Zellschriftfarbe, die Füllungen und die bedingte Formatierung überprüfen.

LibreOffice Calc zeigt Formeln als Text an? Ergebnisse wiederherstellen

LibreOffice Calc zeigt Formeln als Text an? Ergebnisse wiederherstellen

Erfahren Sie, warum Calc Formeltext anstelle von berechneten Werten anzeigt und beheben Sie Anzeigemodus-Probleme, textformatierte Zellen, Apostrophe oder veraltete Ergebnisse.

Writer-Briefe mit Logo und Tabellenfeldern zusammenführen

Writer-Briefe mit Logo und Tabellenfeldern zusammenführen

Erstellen Sie einen wiederverwendbaren Writer-Serienbrief mit Calc-Empfängerdaten und einem gemeinsam genutzten eingebetteten Bild, sehen Sie sich anschließend die personalisierten Briefe in der Vorschau an und speichern Sie sie.

Optionale Diagnose- und Aktualisierungsdaten in LibreOffice einschränken

Optionale Diagnose- und Aktualisierungsdaten in LibreOffice einschränken

Deaktivieren Sie die optionalen Update-Statistiken und Absturzberichtsaufforderungen von LibreOffice und prüfen Sie anschließend, was die Einstellungen umfassen und wie Sie diese überprüfen können.

Reguläre Ausdrücke in LibreOffice Writer verwenden, um Text stapelweise zu bearbeiten

Reguläre Ausdrücke in LibreOffice Writer verwenden, um Text stapelweise zu bearbeiten

Beseitigen Sie Abstände, finden Sie strukturierten Text und ordnen Sie Namen mit Writer-Regex-Mustern neu an, die Sie vor dem Ersetzen in einer Vorschau anzeigen können.

Arabische und hebräische Absätze in Writer von rechts nach links schreiben

Arabische und hebräische Absätze in Writer von rechts nach links schreiben

Aktivieren Sie die bidirektionalen Steuerelemente von Writer, legen Sie den RTL-Absatzfluss fest und prüfen Sie gemischten arabischen oder hebräischen Text, ohne englische Wörter und Zahlen zu beeinträchtigen.

Calibri und Arial in LibreOffice ohne Rätselraten wiederherstellen

Calibri und Arial in LibreOffice ohne Rätselraten wiederherstellen

Installieren Sie metrisch kompatible Linux-Schriftarten oder ordnen Sie LibreOffice-Fallback-Schriftarten zu, wobei Sie die Lizenzbestimmungen und Layoutunterschiede von Microsoft-Schriftarten berücksichtigen sollten.

Erstellen ausfüllbarer PDFs aus Formularen in LibreOffice Writer

Erstellen ausfüllbarer PDFs aus Formularen in LibreOffice Writer

Fügen Sie in Writer nutzbare Textfelder, Kontrollkästchen und Dropdown-Menüs hinzu und exportieren Sie anschließend eine PDF-Datei, die die Empfänger ausfüllen und speichern können.

Mit LibreOffice PDFs die verwendeten Schriftarten beibehalten

Mit LibreOffice PDFs die verwendeten Schriftarten beibehalten

Beheben Sie fehlende oder ersetzte Schriftarten in LibreOffice Writer PDFs, wählen Sie das richtige Exportprofil und überprüfen Sie vor dem Teilen, welche Schriftarten eingebettet sind.