Wie man Python-Skripte in LibreOffice Calc-Makros ausführt

Ja. LibreOffice Calc kann Python-Code als Makro innerhalb des LibreOffice-Prozesses ausführen, und ein LibreOffice Basic-Makro kann über das LibreOffice-Skriptframework ebenfalls eine Python-Funktion aufrufen. Wenn Sie Zellen in der geöffneten Tabelle lesen oder ändern möchten, ist ein Python-Makro innerhalb des Prozesses in der Regel der einfachste Ausgangspunkt. Verwenden Sie einen Basic-zu-Python-Aufruf, wenn ein bestehendes Basic-Makro eine Aufgabe an eine wiederverwendbare Python-Funktion übergeben soll.

Diese Vorgehensweisen unterscheiden sich vom Starten eines gewöhnlichen System-Python-Skripts über einen Shell-Befehl. Ein normaler externer Python-Prozess empfängt das Dokumentobjekt von Calc nicht automatisch. Um auf Arbeitsmappen zuzugreifen, führen Sie ein Python-Makro über LibreOffice aus oder verbinden Sie einen externen Prozess gezielt über UNO mit einer LibreOffice-Instanz.

Was bedeutet „Python innerhalb eines Calc-Makros ausführen“?

LibreOffice unterstützt über sein Skript-Framework mehrere Skriptsprachen. In einem Python-Makro stellt LibreOffice ein UNO-Kontextobjekt bereit, das dem Skript den Zugriff auf das aktuelle Dokument und dessen Tabellenblätter ermöglicht. Ein Python-Makro ist eine Funktion in einem .pyModul; das Modul- g_exportedScriptsTupel identifiziert die Funktionen, die LibreOffice als ausführbare Makros anzeigen soll.

Ein Python-Makro kann eigenständig über das Makromenü von Calc ausgeführt werden. Es muss nicht von Basic aufgerufen werden. Falls Sie bereits ein Basic-Makro haben und dieses Python aufrufen möchten, Session.ExecutePythonScriptkann der Skriptanbieter von LibreOffice oder der neuere Dienst ScriptForge die beiden Sprachen verbinden.

Welchen Ansatz sollten Sie wählen?

  • Verwenden Sie ein Python-Makro direkt, wenn die Aufgabe hauptsächlich in Python geschrieben ist und das aktuelle Calc-Dokument benötigt wird. Dadurch wird ein Sprachwechsel vermieden und die Fehlersuche als einzelnes Skript vereinfacht.
  • Python aus Basic aufrufen, wenn Sie bereits Basic-Code, Schaltflächen oder Dokumentereignisse haben, die erhalten bleiben sollen, und Sie einen Python-Helfer benötigen, der eine gezielte Berechnung oder Datenoperation durchführt.
  • Verwenden Sie einen externen Python-Prozess, wenn Sie eine separate Entwicklungsumgebung oder Python-Pakete benötigen, die nicht in LibreOffice enthalten sind. Richten Sie eine explizite UNO-Verbindung ein; gehen Sie nicht davon aus, dass ein Skript, das über das Terminal gestartet wird, auf die geöffnete Tabelle zugreifen kann.

Ein kleines Tool zur Tabellenbereinigung lässt sich beispielsweise vollständig als Python-Makro schreiben. Falls eine vorhandene Schaltfläche bereits einen Bericht ausführt, kann das zugehörige Makro beibehalten und eine Python-Funktion aufgerufen werden, die die Berichtssumme berechnet.

Wie erstellt man ein Python-Makro, das Calc-Zellen bearbeitet?

LibreOffice speichert persönliche Python-Skripte im Benutzerprofil, anwendungsweite Skripte im Installationsverzeichnis und Dokumentskripte zusammen mit dem jeweiligen Dokument. Für einen ersten Test ist ein persönliches Skript praktisch, da es in jedem geöffneten LibreOffice-Dokument desselben Benutzers verfügbar ist. Es wird jedoch nicht mit der ODS-Datei übertragen, sodass es nicht automatisch an andere Benutzer mit der Tabellenkalkulation übergeben wird.

Den persönlichen Python-Skriptordner Ihres Systems finden Sie in der LibreOffice-Hilfe unter „Organisation und Speicherort der Python-Skripte“. Gängige Speicherorte sind %APPDATA%\LibreOffice\4\user\Scripts\pythonunter Windows und ~/.config/libreoffice/4/user/Scripts/pythonLinux. Der tatsächliche Pfad kann variieren; verwenden Sie daher den für Ihre Installation dokumentierten Speicherort, anstatt ein zweites Profilverzeichnis auf gut Glück anzulegen.

calc_tools.pyErstellen Sie im persönlichen Python-Skriptordner eine Datei mit dem entsprechenden Namen und fügen Sie dann dieses einfache Beispiel hinzu:

def double_a1(args=None):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()

    source = sheet.getCellRangeByName("A1")
    target = sheet.getCellRangeByName("B1")
    target.setValue(source.getValue() * 2)

g_exportedScripts = (double_a1,)

Diese Funktion liest den numerischen Wert in Zelle A1 des aktiven Tabellenblatts und schreibt das Doppelte dieses Wertes in Zelle B1. XSCRIPTCONTEXTSie wird einem LibreOffice-Python-Makro zur Laufzeit übergeben; es handelt sich nicht um eine reguläre globale Python-Variable, wenn dieselbe Datei außerhalb von LibreOffice geöffnet wird. Die öffentliche Funktion ist in der Datei `/etc/libreoffice.py` aufgeführt, g_exportedScriptssodass sie in der Makroauswahl erscheint.

Speichern Sie die Datei, öffnen Sie Calc oder kehren Sie zu Calc zurück und wählen Sie „Extras“ > „Makros“ > „Makros ausführen“ . Je nach LibreOffice-Version oder Plattformübersetzung kann die Menübezeichnung im Singular stehen. Wählen Sie „Meine Makros“ > „calc_tools“ > „double_a1“ und führen Sie das Makro aus. Geben Sie zuerst eine Zahl in A1 ein und prüfen Sie dann, ob B1 den verdoppelten Wert enthält. Falls das Modul nicht angezeigt wird, überprüfen Sie, ob die Dateierweiterung korrekt ist .py, sich die Datei im richtigen Python-Ordner Ihres Profils befindet und die Python-Skriptunterstützung installiert ist. Ein Neustart von LibreOffice nach dem Hinzufügen eines neuen Moduls kann die Skriptliste aktualisieren.

Wie kann ein Basic-Makro eine Python-Funktion aufrufen?

Für einen BASIC-zu-Python-Aufruf legen Sie ein Python-Modul in Ihren persönlichen Skriptordner und rufen dessen Funktion über den ScriptForge- SessionDienst auf. Dieses Beispiel addiert zwei Werte in Python und schreibt das Ergebnis in Zelle B1 des aktuellen Tabellenblatts.

In calc_tools.py, definieren Sie die Funktion:

def add_values(first, second):
    return float(first) + float(second)

g_exportedScripts = (add_values,)

Erstellen Sie anschließend ein einfaches Makro in Calc und verwenden Sie es:

Sub RunPythonHelper()
    Dim session As Object
    Dim result As Variant
    Dim sheet As Object

    session = CreateScriptService("Session")
    result = session.ExecutePythonScript( _
        session.SCRIPTISPERSONAL, _
        "calc_tools.py$add_values", _
        12, 30)

    sheet = ThisComponent.CurrentController.getActiveSheet()
    sheet.getCellRangeByName("B1").setValue(result)
End Sub

Führen Sie RunPythonHelperdas Skript über die Makroauswahl aus. Bei erfolgreichem Aufruf sollte in B1 der Wert 42 angezeigt werden. Die Skriptreferenz folgt dem Format module.py$function_name`<script referenz>`. Für ein Modul in einem Unterordner oder an einem anderen Speicherort verwenden Sie die Syntax und die für die jeweilige ScriptForge-Version dokumentierte Speicherortkonstante. Verwenden Sie für Argumente und Rückgabewerte Datentypen, die von beiden Sprachen sauber dargestellt werden können, wie z. B. Zahlen, Zeichenketten und einfache Sequenzen.

CreateScriptServiceDie dokumentierten ScriptForge-Sitzungshilfsfunktionen sind in modernen LibreOffice-Versionen verfügbar, Menünamen und mitgelieferte Komponenten können jedoch in älteren oder in Distributionspaketen enthaltenen Versionen abweichen. Falls dieser Dienst nicht verfügbar ist, verwenden Sie die dokumentierte UNO-Skriptanbietermethode von LibreOffice, die ein Makro XScriptaus einer Skript-URI abruft und aufruft. Vermeiden Sie es, Codefragmente für einen anderen Makrospeicherort zu kopieren, ohne die Speicherorteinstellung zu ändern.

Soll der Python-Code persönlich, geteilt oder eingebettet sein?

LagerungOptimale PassformAbtausch
Meine Makros / BenutzerprofilIhre eigenen wiederverwendbaren Werkzeuge für verschiedene DokumenteWird nicht automatisch beim Versenden der Tabelle mitgeliefert.
AnwendungsmakrosSkripte werden für mehrere Benutzer auf einer Installation verwaltetFür die Installation und Wartung ist in der Regel ein Administratorzugriff erforderlich.
DokumentmakrosCode, der einem Dokument zugeordnet werden sollDie Empfänger müssen möglicherweise Makros zulassen; testen Sie die Portabilität und das Sicherheitsverhalten in der Zielversion von LibreOffice.

Für einen Team-Workflow sollten Sie festlegen, wie die Empfänger den Code erhalten und ihm vertrauen, bevor Sie eine Arbeitsmappe mit einem persönlichen Makro erstellen. Falls die Python-Logik in die Tabellenkalkulation integriert werden muss, testen Sie die Makrospeicherung und die Sicherheitsabfragen des Dokuments mit denselben LibreOffice-Versionen, die Ihre Empfänger verwenden. Bei der verwalteten Bereitstellung kann ein Administrator Skripte für Benutzer paketieren oder eine Erweiterung gemäß den üblichen Softwarerichtlinien der Organisation verteilen.

Warum könnte das Makro fehlen oder fehlschlagen?

  • Die Python-Option bzw. das Python-Modul fehlt. Bei einigen GNU/Linux-Distributionen ist das Python-Skript-Framework von LibreOffice ein optionales Paket. Falls die Python-Makros im Makro-Dialog nicht angezeigt werden, überprüfen Sie die Installationshinweise Ihrer Distribution zu LibreOffice.
  • Das Skript wurde im falschen Profil gespeichert. LibreOffice unterstützt mehrere Benutzerprofile. Überprüfen Sie den Profilpfad Ihrer aktuellen Installation und speichern Sie das Modul im entsprechenden Scripts/pythonVerzeichnis.
  • Die Funktion wird nicht exportiert. Fügen Sie sie g_exportedScriptseiner Funktion hinzu, die Sie über den Makroselektor ausführen möchten. Achten Sie darauf, dass die Tupelsyntax das abschließende Komma für ein Tupel mit einem Element enthält.
  • Das Skript wird außerhalb von LibreOffice ausgeführt. XSCRIPTCONTEXT Es existiert für ein Makro, das von LibreOffice gestartet wird, nicht aber, wenn dieselbe Datei mit dem Systembefehl gestartet wird python. Verwenden Sie den Makro-Runner oder richten Sie eine dokumentierte UNO-Verbindung ein.
  • Die Makrosicherheit blockiert eingebetteten Code. Überprüfen Sie die Makrosicherheitseinstellungen von LibreOffice und aktivieren Sie nur Code aus vertrauenswürdigen Quellen. Das Senken der globalen Sicherheitsstufe ist keine geeignete Lösung zur Fehlerbehebung.
  • Ein importiertes Modul kann den Dokumentkontext nicht einsehen. LibreOffice-Dokumente XSCRIPTCONTEXTwerden nicht an importierte Module übergeben. Übergeben Sie das benötigte Dokument- oder Tabellenblattobjekt an Hilfsfunktionen, anstatt zu erwarten, dass importierte Module diese globale Variable lesen.
  • Es gibt keine sichtbare Konsolenausgabe. Die Standardausgabe von Python ist nicht verfügbar, wenn ein Makro über das Menü „Tools > Makros“ ausgeführt wird. Um eine Rückmeldung zu erhalten, schreiben Sie das Ergebnis in eine Zelle, verwenden Sie einen LibreOffice-Dialogdienst oder protokollieren Sie die Ausgabe in einer Datei Ihrer Wahl.

Wie lässt sich das Ergebnis sicher überprüfen?

Testen Sie mit einer Kopie der Tabelle und einer bekannten Eingabe. Stellen Sie sicher, dass das Python-Makro im Runner angezeigt wird, führen Sie es einmal aus und vergleichen Sie die Ausgabezelle mit einem manuell berechneten Ergebnis. Testen Sie bei einem Basic-zu-Python-Aufruf eine einfache Eingabe und prüfen Sie, ob der zurückgegebene Wert in das gewünschte Tabellenblatt geschrieben wird. Vermeiden Sie Skripte, die Tabellenblätter löschen, große Bereiche überschreiben oder Betriebssystembefehle ausführen.

Wenn der Test erfolgreich ist, legen Sie fest, wie das Skript auf anderen Computern installiert werden soll, und dokumentieren Sie alle benötigten Python-Bibliotheken oder LibreOffice-Versionsvoraussetzungen. Die in LibreOffice integrierte Python-Umgebung wird für In-Process-Makros verwendet; Pakete, die für einen separaten System-Python-Interpreter installiert wurden, stehen möglicherweise nicht zur Verfügung. Falls Sie Pakete eines anderen Interpreters benötigen, verwenden Sie die Methode „Externer Prozess/UNO“ und konfigurieren Sie diese Verbindung entsprechend.

Offizielle Referenzen

Einen Kommentar hinterlassen

How to Connect ONLYOFFICE Desktop Editors to an ownCloud Server

How to Connect ONLYOFFICE Desktop Editors to an ownCloud Server

Connect ONLYOFFICE Desktop Editors to your ownCloud server, sign in, open cloud files, manage the connection, and troubleshoot common setup issues.

So beheben Sie die hohe CPU-Auslastung von Collabora Online (von loolwsd / coolwsd)

So beheben Sie die hohe CPU-Auslastung von Collabora Online (von loolwsd / coolwsd)

Beheben Sie Probleme mit hoher Collabora Online-CPU-Auslastung, indem Sie ausgelastete Kit-Prozesse identifizieren, Metriken und Protokolle überprüfen, Parallelität und Bereinigung optimieren und Korrekturen sicher verifizieren.

So gestalten Sie ONLYOFFICE Docs mit Ihrem Logo und Ihren Farben individuell

So gestalten Sie ONLYOFFICE Docs mit Ihrem Logo und Ihren Farben individuell

Erfahren Sie, wie Sie ONLYOFFICE Docs mit einem Header-Logo und Oberflächenfarben individuell gestalten, einschließlich Lizenzbeschränkungen, Theme-JSON-Einrichtung, Docker-Pfaden und Tests.

Behebung von Problemen mit der Textlesbarkeit im Dunkelmodus in LibreOffice Calc

Behebung von Problemen mit der Textlesbarkeit im Dunkelmodus in LibreOffice Calc

Schwer lesbaren Text in LibreOffice Calc können Sie beheben, indem Sie das App-Design, die Schriftart und Füllfarben der Zellen, die Stile und die bedingte Formatierung überprüfen – und anschließend die Druckausgabe kontrollieren.

Beheben des Fehlers „Dokument ist von unbekanntem Benutzer gesperrt“ in LibreOffice

Beheben des Fehlers „Dokument ist von unbekanntem Benutzer gesperrt“ in LibreOffice

Die LibreOffice-Warnung wegen unbekannter Benutzersperre lässt sich sicher beheben. Überprüfen Sie die aktiven Sitzungen, schützen Sie eine Kopie, entfernen Sie nur die verifizierte, veraltete Sperre und testen Sie das Dokument.

Arabischen und hebräischen Text mit Rechts-nach-links-Schreibrichtung in LibreOffice Writer korrigieren

Arabischen und hebräischen Text mit Rechts-nach-links-Schreibrichtung in LibreOffice Writer korrigieren

Korrigieren Sie in LibreOffice Writer arabischen oder hebräischen Text, der nicht korrekt fließt, ausgerichtet ist oder sich mit englischem Text vermischt. Aktivieren Sie das komplexe Textlayout, legen Sie die Absatzrichtung fest und überprüfen Sie das Ergebnis.

LibreOffice Calc VLOOKUP vs. XLOOKUP: Einsteigerfreundlicher Funktionsleitfaden

LibreOffice Calc VLOOKUP vs. XLOOKUP: Einsteigerfreundlicher Funktionsleitfaden

Lernen Sie VLOOKUP und XLOOKUP in LibreOffice Calc kennen, einschließlich exakter Übereinstimmungen, Linkssuchen, Nicht-Ergebnisse, umgekehrter Suche, INDEX/MATCH-Alternativen und häufiger Fehler.

So beheben Sie den Fehler „WOPI-Beweisvalidierung fehlgeschlagen“ in Collabora Online

So beheben Sie den Fehler „WOPI-Beweisvalidierung fehlgeschlagen“ in Collabora Online

Beheben Sie Fehler bei der Validierung des WOPI-Nachweises in Collabora Online, indem Sie die Discovery-Schlüssel, die Schlüsselrotation, die Proxy-URLs, die Zeitstempel und die Host-Zulassungslisten überprüfen.

So aktivieren Sie die standardmäßige Änderungsnachverfolgung in ONLYOFFICE Docs

So aktivieren Sie die standardmäßige Änderungsnachverfolgung in ONLYOFFICE Docs

Aktivieren Sie die Funktion „Änderungen nachverfolgen“ für alle Benutzer in einem ONLYOFFICE-Dokument, behalten Sie sie nach dem erneuten Öffnen bei und machen Sie sich mit den Grenzen einer globalen Standardeinstellung vertraut.

So konfigurieren Sie Leerlauf-Timeouts für Collabora-Bearbeitungssitzungen

So konfigurieren Sie Leerlauf-Timeouts für Collabora-Bearbeitungssitzungen

Vergleichen Sie die Timeout-Werte pro Ansicht, außerhalb des Fokus, im Leerlauf, beim automatischen Speichern und beim Proxy von Collabora Online und wählen Sie dann die für Ihre Bereitstellung passenden Einstellungen aus und überprüfen Sie diese.