LibreOffice 6.2では日本語入力に問題あり LibreOffice最新版 | LibreOffice - オフィススイートのルネサンス と LibreOffice Fresh : “LibreOffice Packaging” team いずれからインスト...
pq@pq-VirtualBox:~$ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/pq/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/libreoffice/program']/usr/lib/libreoffice/programへのパスが通っています。
LibreOffice最新版 | LibreOffice - オフィススイートのルネサンスからダウンロードしてインストールした場合は、バンドルPythonがインタープリターになっているので、Jupyter NotebookをバンドルPythonで起動する(linuxBean14.04(88)LibreOffice5をIPython Notebookから操作する-p--q)か、sites.pthファイルを作ってunoへのパスを通しておかないといけません(linuxBean14.04(38)LibreOfficeバンドルPythonにパッケージを追加-p--q)。
XSCRIPTCONTEXTを取得する
マクロと同じ挙動にしたいのでXSCRIPTCONTEXTを取得します。
import os
os.environ["UNO_PATH"] = "/usr/lib/libreoffice/program"
import unohelper
import officehelper
from com.sun.star.script.provider import XScriptContext
ctx = officehelper.bootstrap() # コンポーネントコンテクストの取得。
class ScriptContext(unohelper.Base, XScriptContext):
def __init__(self, ctx):
self.ctx = ctx
def getComponentContext(self):
return self.ctx
def getDesktop(self):
return ctx.getByName('/singletons/com.sun.star.frame.theDesktop') # com.sun.star.frame.Desktopはdeprecatedになっている。
def getDocument(self):
return self.getDesktop().getCurrentComponent()
XSCRIPTCONTEXT = ScriptContext(ctx)
コンポーネントコンテクストの取得にはofficehelperを使っています。officehelperはインタープリターをUNO_PATHのパスで探すので、soffice.binのあるディレクトリのパスを渡しています。
WindowsでもLibreOffice5(1)officehelper.bootstrap()を使う-p--qのように短い形式の名前でパスを渡せばうまくいきそうです(未確認)。
Windowsの場合はパンドルPythonになるのでそのインタープリターでJupyter Notebookを起動するかunoへのパスを通しておかないといけません。
Snipettsに登録する
拡張機能のSnipettsにLibreOfficeのXSCRIPTCONTEXTを取得するコードを登録します。
~/.local/share/jupyter/nbextensions/snippetsにあるsnippets.jsonを編集します。
{
"snippets" : [
{
"name" : "LibreoOffice",
"code" : [
"import os",
"os.environ['UNO_PATH'] = '/usr/lib/libreoffice/program'",
"import unohelper",
"import officehelper",
"from com.sun.star.script.provider import XScriptContext",
"ctx = officehelper.bootstrap() # コンポーネントコンテクストの取得。",
"class ScriptContext(unohelper.Base, XScriptContext):",
" def __init__(self, ctx):",
" self.ctx = ctx",
" def getComponentContext(self):",
" return self.ctx",
" def getDesktop(self):",
" return ctx.getByName('/singletons/com.sun.star.frame.theDesktop') # com.sun.star.frame.Desktopはdeprecatedになっている。",
" def getDocument(self):",
" return self.getDesktop().getCurrentComponent()",
"XSCRIPTCONTEXT = ScriptContext(ctx)"
]
}
]
}
Notebookを開き直すとLibreOfficeのスニペットが使えるようになります。

Windows環境ですが、この記事主体にいろいろ参考にして、
返信削除主要モジュール全入り WinPython の Jupyter Lab から接続できました。
ありがとうございます。