Arbeiten mit LibreOffice in Python: Importieren

Version verwendet

Überblick

Führen Sie beim Importieren eines Moduls mit Python, das LibreOffice ausführt, zusätzlich zu der üblichen Modulsuche die folgende Modulsuche durch.

Makro sys.path

\ <LibreOffice-Installationsverzeichnis > / Programmverzeichnis

Wenn Sie Python-Makros ausführen, enthält sys.path das Verzeichnis \ <LibreOffice-Installationsverzeichnis > / program. \ <LibreOffice-Installationsverzeichnis > ist / usr / local / lib / libreoffice für FreeBSD und% PROGRAMFILES% \ LibreOffice für Microsoft Windows. Importieren Sie von hier aus uno, unohelper, pythonscript, msgbox.

Pythonpath-Verzeichnis und pythonpath.zip-Datei

Wenn das Unterverzeichnis pythonpath des Verzeichnisses, in dem das Makro installiert ist, oder die Datei pythonpath.zip vorhanden ist, wird es zu sys.path hinzugefügt und ist die Symmetrie der Modulsuche.

Für Benutzermakros

%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath
%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath.zip
${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath
${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath.zip

Wird sein. Diese Pfade bleiben nach dem Beenden des Makros erhalten, bis Sie LibreOffice beenden. Es wird davon ausgegangen, dass die Loader-Klasse im Installationsverzeichnis \ <LibreOffice > /program/pythonloader.py enthalten ist. Die Funktion checkForPythonPathBesideComponent () in derselben Datei wird verwendet, um die Existenz zu überprüfen und zu sys.path hinzuzufügen.

Systemfreigabemakros und -erweiterungen werden ebenfalls hinzugefügt, sodass sys.path beim Aufrufen von Makros möglicherweise unnötige Verzeichnisse enthält.

Versuchen Sie beispielsweise, das folgende Makro auszuführen, um den Inhalt von sys.path in einem Meldungsfeld anzuzeigen.

syspath.py


import sys
from msgbox import MsgBox

def syspath_msgbox():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    sys_path_box = MsgBox(ctx)
    sys_path_box.addButton('oK')
    sys_path_box.renderFromBoxSize(300)
    sys_path = '\n'.join(sys.path)
    sys_path_box.show(sys_path, 0, 'sys.path')

Folgendes wird angezeigt. Zu diesem Zeitpunkt wird das Unterverzeichnis pythonpath erstellt, die Datei pythonpath.zip ist jedoch nicht vorhanden. Das zweite angezeigte Verzeichnis / home / shota243 ist das aktuelle Verzeichnis, wenn LibreOffice gestartet wird. Zu diesem Zeitpunkt ist die Umgebungsvariable PYTHONPATH nicht festgelegt.

/usr/local/lib/libreoffice/program
/home/shota243
/usr/local/lib/python37.zip
/usr/local/lib/python3.7
/usr/local/lib/python3.7/lib-dynload
/home/shota243/.local/lib/python3.7/site-packages
/usr/local/lib/python3.7/site-packages
/home/shota/.config/libreoffice/4/user/Scripts/python/pythonpath

APSO --Alternative Script Organizer für Python Zeigen Sie sys.path über die Python-Interpreterkonsole der Erweiterung an Wenn Sie dies tun, ist es wie folgt.

APSO python console [LibreOffice]
3.7.7 (default, Jun 21 2020, 22:27:00) 
[Clang 8.0.0 (tags/RELEASE_800/final 356365)]
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for p in sys.path:
...  print(p)
... 
/usr/local/lib/libreoffice/program
/home/shota243
/usr/local/lib/python37.zip
/usr/local/lib/python3.7
/usr/local/lib/python3.7/lib-dynload
/home/shota243/.local/lib/python3.7/site-packages
/usr/local/lib/python3.7/site-packages
/home/shota243/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2030qffpne.tmp_/apso.oxt/python/pythonpath
>>> 

Das Installationsziel der APSO-Erweiterung ist /home/shota243/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2030qffpne.tmp_. (Ausgelassen) lu2030qffpne.tmp_ / apso.oxt / python / apso.py ist der Hauptteil (Ausgelassen) im Verzeichnis lu2030qffpne.tmp_ / apso.oxt / python / pythonpath Die Module sind apso_debug.py, apso_utils.py und theconsole.py.

Import aus UNO-spezifischem Modul

Programme, die Makros oder Uno importieren, können Bezeichner aus Modulen importieren, die mit com.sun.star beginnen.

Dies liegt daran, dass die Funktion \ _ \ _ import \ _ \ _ (), die den tatsächlichen Importstatus darstellt, durch die Funktion \ _uno \ _import () im Installationsverzeichnis \ <LibreOffice > /program/uno.py ersetzt wurde. com existiert nirgendwo im Modul-Suchpfad. Wenn in der Funktion \ _uno \ _import () die Standardfunktion \ _ \ _ import \ _ \ _ () nicht nach einem Modul sucht, versucht die Funktion pyuno.getClass (), es abzurufen. Zu diesem Zeitpunkt, da \ <Modulname > und \ <Bezeichner > von \ <Modulname > Import \ <Bezeichner > verkettet sind, um getClass () aufzurufen, \ <Modulname > Gesamtimport oder von Die Ausnahme ist der Massenimport mit \ <Modulname > Import *.

Beispiel:

mike% export PYTHONPATH="${PYTHONPATH}:/usr/local/lib/libreoffice/program"
mike% export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib/libreoffice/program"
mike% export PATH="${PATH}:/usr/local/lib/libreoffice/program"
mike% python
python
Python 3.7.7 (default, Jun 21 2020, 22:27:00) 
[Clang 8.0.0 (tags/RELEASE_800/final 356365)] on freebsd11
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
import uno
>>> from com.sun.star.uno import RuntimeException
from com.sun.star.uno import RuntimeException
>>> import com.sun.start.uno.RuntimeException
import com.sun.start.uno.RuntimeException
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/libreoffice/program/uno.py", line 356, in _uno_import
    return _builtin_import(name, *optargs, **kwargs)
ModuleNotFoundError: No module named 'com'
>>> from com.sun.star.uno import *
from com.sun.star.uno import *
from com.sun.star.uno import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/libreoffice/program/uno.py", line 434, in _uno_import
    raise uno_import_exc
  File "/usr/local/lib/libreoffice/program/uno.py", line 356, in _uno_import
    return _builtin_import(name, *optargs, **kwargs)
ImportError: No module named 'com' (or 'com.sun.star.uno.*' is unknown)
>>> 

Die Referenz der Module und Bezeichner, die importiert werden können, wird als com :: sun :: star Module Reference betrachtet.

Recommended Posts

Arbeiten mit LibreOffice in Python: Importieren
Betreiben Sie LibreOffice mit Python
Umgang mit Sounds in Python
Arbeiten mit DICOM-Bildern in Python
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Importieren Sie tsv mit Python
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
[Einführung für Anfänger] Umgang mit MySQL mit Python
Schaben mit Selen in Python
Schaben mit Chromedriver in Python
Importieren Sie Skripte dynamisch in Python
Importieren Sie vtk mit Brew Python
Debuggen mit pdb in Python
Python: Arbeiten mit Firefox mit Selen
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Spezifischer Beispielcode für die Arbeit mit SQLite3 in Python
Führen Sie eine Python-Datei mit relativem Import in PyCharm aus
Zahlenerkennung in Bildern mit Python
Testen mit Zufallszahlen in Python
GOTO in Python mit erhabenem Text 3
Scraping mit Selen in Python (Basic)
CSS-Analyse mit cssutils in Python
Numer0n mit Elementen, die mit Python erstellt wurden
Öffnen Sie UTF-8 mit Stückliste in Python
Verwenden Sie rospy mit virtualenv in Python3
Verwenden Sie Python in pyenv mit NeoVim
Heatmap mit Dendrogramm in Python + Matplotlib
Lesen Sie Dateien parallel zu Python
Passwort für Lehrbuch mit Python generieren
Verwenden Sie OpenCV mit Python 3 in Window
Bis zum Umgang mit Python in Atom
Beginnen Sie mit Python mit Blender
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Versuchen Sie, sich mit Python bei qiita anzumelden
Stresstest mit Locust in Python geschrieben
Python3> im Schlüsselwort> Wahr mit teilweiser Übereinstimmung?
Exklusive Steuerung mit Sperrdatei in Python
Geräteüberwachung durch On-Box Python von IOS-XE
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Tipps zum Umgang mit Binärdateien in Python
Zeigen Sie Python 3 im Browser mit MAMP an
So arbeiten Sie mit BigQuery in Python
Trump-Klasse in Python (mit Vergleich)
Arbeiten mit OpenStack mit dem Python SDK
Bearbeiten von Azure CosmosDB aus Python Part.2
Umgang mit "Jahren und Monaten" in Python
Verarbeiten Sie mehrere Listen mit for in Python
Ersetzen Sie Nicht-ASCII durch reguläre Ausdrücke in Python
Einzeiler webServer (mit CGI) in Python
Beginnen wir mit TopCoder in Python (Version 2020)
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
So betreiben Sie die Zeitstempelstation in Python
Rufen Sie APIGateWay mit APIKey in Python-Anforderungen auf