Travailler avec LibreOffice en Python: import

Version utilisée

Aperçu

Lors de l'importation d'un module avec Python qui exploite LibreOffice, effectuez la recherche de module suivante en plus de la recherche habituelle.

Macro sys.path

\ <Répertoire d'installation de LibreOffice > / répertoire du programme

Lors de l'exécution de macros Python, sys.path contient le répertoire \ <répertoire d'installation de LibreOffice > / program. \ <Répertoire d'installation de LibreOffice > est / usr / local / lib / libreoffice pour FreeBSD et% PROGRAMFILES% \ LibreOffice pour Microsoft Windows. Importez uno, unohelper, pythonscript, msgbox à partir d'ici.

répertoire pythonpath et fichier pythonpath.zip

Si le sous-répertoire pythonpath du répertoire où la macro est installée ou le fichier pythonpath.zip existe, il sera ajouté à sys.path pour rendre la recherche du module symétrique.

Pour les macros utilisateur,

--Pour Microsoft Windows

%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath
%APPDATA%\LibreOffice\4\user\Scripts\python\pythonpath.zip

--Pour les systèmes de type FreeBSD ou UNIX

${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath
${HOME}/.config/libreoffice/4/user/Scripts/python/pythonpath.zip

Sera. Ces chemins sont conservés après la sortie de la macro jusqu'à ce que vous quittiez LibreOffice. Il est présumé qu'elle contient la classe Loader dans \ <répertoire d'installation de LibreOffice > /program/pythonloader.py. La fonction checkForPythonPathBesideComponent () dans le même fichier est utilisée pour vérifier l'existence et l'ajouter à sys.path.

Des macros et extensions partagées par le système sont également ajoutées, donc sys.path peut contenir des répertoires inutiles lors de l'appel de macros.

Par exemple, essayez d'exécuter la macro suivante pour afficher le contenu de sys.path dans une boîte de message.

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')

Ce qui suit est affiché. À ce stade, le sous-répertoire pythonpath est créé, mais le fichier pythonpath.zip n'existe pas. Le deuxième affiché / home / shota243 est le répertoire courant au démarrage de LibreOffice. À ce stade, la variable d'environnement PYTHONPATH n'est pas définie.

/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 for Python Voir sys.path depuis l'extension de la console d'interprétation Python Si vous le faites, c'est comme suit.

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
>>> 

La destination d'installation de l'extension APSO est /home/shota243/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2030qffpne.tmp_. (Omis) lu2030qffpne.tmp_ / apso.oxt / python / apso.py est le corps principal (Omis) sous le répertoire lu2030qffpne.tmp_ / apso.oxt / python / pythonpath Les modules sont apso_debug.py, apso_utils.py et theconsole.py.

Importer à partir d'un module spécifique à UNO

Les programmes qui importent des macros ou uno peuvent importer des identifiants à partir de modules commençant par com.sun.star.

En effet, la fonction \ _ \ _ import \ _ \ _ (), qui est l'état réel de l'importation, a été remplacée par la fonction \ _uno \ _import () dans \ <répertoire d'installation de LibreOffice > /program/uno.py. com n'existe nulle part dans le chemin de recherche du module. Dans la fonction \ _uno \ _import (), si la fonction standard \ _ \ _ import \ _ \ _ () ne parvient pas à rechercher un module, la fonction pyuno.getClass () tente de l'obtenir. À ce stade, puisque \ <nom du module > et \ <identifiant > de \ <nom du module > import \ <identifiant > sont concaténés pour appeler getClass (), \ <nom du module > importation entière ou depuis L'exception est l'importation en bloc avec \ <nom du module > import *.

Exemple:

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)
>>> 

La référence des modules et identifiants pouvant être importés est considérée comme com :: sun :: star Module Reference.

Recommended Posts

Travailler avec LibreOffice en Python: import
Exploitez LibreOffice avec Python
Gérer les sons en Python
Travailler avec des images DICOM en Python
Essayez de travailler avec des données binaires en Python
Importer tsv avec Python
Essayez de travailler avec Mongo en Python sur Mac
[Introduction pour les débutants] Manipuler MySQL avec Python
Grattage au sélénium en Python
Grattage avec chromedriver en python
Importer dynamiquement des scripts en Python
Importer vtk avec brew python
Débogage avec pdb en Python
Python: travailler avec Firefox avec du sélénium
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Exemple de code spécifique pour travailler avec SQLite3 en Python
Exécuter un fichier Python avec une importation relative dans PyCharm
Reconnaissance des nombres dans les images avec Python
Tester avec des nombres aléatoires en Python
GOTO en Python avec Sublime Text 3
Scraping avec Selenium en Python (Basic)
Analyse CSS avec cssutils en Python
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
Utiliser rospy avec virtualenv dans Python3
Utiliser Python mis en pyenv avec NeoVim
Heatmap avec dendrogramme en Python + matplotlib
Lire des fichiers en parallèle avec Python
Générer un mot de passe pour le manuel avec python
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
Démarrez avec Python avec Blender
Écrire de la documentation dans Sphinx avec Python Livereload
Obtenez des données supplémentaires vers LDAP avec python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Essayez de vous connecter à qiita avec Python
Test de stress avec Locust écrit en Python
Python3> dans le mot clé> Vrai avec une correspondance partielle?
Contrôle exclusif avec fichier de verrouillage en Python
Surveillance des appareils effectuée par Python On-box de IOS-XE
Dessinez Nozomi Sasaki dans Excel avec python
Conseils pour gérer les binaires en Python
Afficher Python 3 dans le navigateur avec MAMP
Comment utiliser BigQuery en Python
Classe Trump en Python (avec comparaison)
Travailler avec OpenStack à l'aide du SDK Python
Manipulation d'Azure CosmosDB à partir de Python Part.2
Gérer les "années et mois" en Python
Traiter plusieurs listes avec for en Python
Remplacer non-ASCII par des expressions régulières en Python
Un serveur Web de ligne (avec CGI) en python
Commençons avec TopCoder en Python (version 2020)
Traitez facilement des images en Python avec Pillow
Pour faire fonctionner la station d'horodatage en Python
Appelez APIGateWay avec APIKey dans les requêtes python