2020年11月15日日曜日

48: LibreOfficeにユーザー/アプリケーション所有のPythonマクロを作成する

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

Pythonの方がBasicよりもずっと良いでしょう、多くの人々にとって。Pythonマクロを作成するのは、難しくも、怪しくも、おたくっぽくもありません。

話題


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice
About: Pythonプログラミング言語

この記事の目次


開始コンテキスト


  • 読者は、LibreOfficeまたはApache OpenOfficeの基本的知識を持っている。
  • 読者は、Pythonプログラミング言語の基本的知識を持っている。

ターゲットコンテキスト



  • 読者は、LibreOfficeまたはOpenOfficeでユーザー所有またはアプリケーション所有のPythonマクロを作成する方法を知る。

オリエンテーション


ドキュメント内Pythonマクロも作成することができますが、それは、次記事で取り扱われます。

任意のマクロ(ユーザー所有、アプリケーション所有、ドキュメント内)ファンクションを任意のUNOプログラムから実行することは、以降のある記事で取り扱われます。

Pythonマクロプログラミングの詳細は、以降のいくつかの記事にて探求されます。.

外部フルPythonを使用することは、以前のある記事にて取り扱われました。

ト書き
Hypothesizer 7、Objector 48A、Objector 48Bがコンピュータの前にいる。


本体


1: あなたのマクロを作成するのに、Basicを使用する必要はありません


Hypothesizer 7
あなたのマクロを作成するのに、Basicを作成する必要はありません。

Objector 48A
はあ?なんで、俺はBasicを使うべきじゃないんだ?

Hypothesizer 7
サー、「べきじゃない」とは私は申しませんでした、しかし、そうなさりたくないだろうと推測はしていました、もしも、ずっと良いオプションをご存知であったなら。

Objector 48A
それは. . .

Hypothesizer 7
Pythonです。

Objector 48A
えーと、私はBasicを使用するように想定されているものと思っていたが。

Hypothesizer 7
サー、たとえ誰の想定であろうが、他人の想定どおりにあなたがする必要はありません。あなたは、あなた自身が選択することを行なうことができます。

Objector 48A
でも、GUIの'Edit Macros(マクロの編集)'メニュー項目は、しれっとBasic IDEを表示するじゃないか、まるで、私はそれを使わなければならないように!

Hypothesizer 7
あなたは、PythonマクロをGUIの外で編集すればよいだけです。

Objector 48A
「GUIの外」?難しいんだろう?

Hypothesizer 7
全然。多分、あのさほど不細工でなくないBasic IDE無しで、あなたはずっと幸せでしょう。

Objector 48A
でも、それってハッキングだろ?怪しいよ!オタクっぽい!

Hypothesizer 7
特にそのようなことはございません。

Objector 48A
Basicがスダンダードだろ?

Hypothesizer 7
スタンダードであろうがなかろうが、はなはだしくさほど良く設計されていないプログラミング言語にかかずらわなければならない義務はあなたにありません。

Objector 48A
「はなはだしくさほど良く設計されていない」. . .

Hypothesizer 7
いくつかのしかるべき機能性(クラスを作成する、マルチスレッドを使用する、等)の欠如は言うに及ばず、その、プログラミング言語としての基盤は、真剣に設計されたようには思えません

Objector 48A
えーと、あんたはそれになんか恨みを持っているようだな。

Hypothesizer 7
「恨み」ですか?. . .えーと、「恨み」は、過去の経験に起因した憤りを意味するように思われますが、私は、間違いなく、過去の経験に起因してではなく、現在のそれのありように起因して、Basicに感情を害されています、つまり、もしも、本当に私が感情を害されているとしての話ですが。


2: ユーザー所有Pythonマクロを作成する方法


Hypothesizer 7
Pythonマクロを作成されるにおいて、LibreOfficeまたはApache OpenOfficeのGUIのことはお忘れになっていただいて結構です。

その代わりに、Pythonマクロは、ご自分のお気に入りのテキストエディタまたはご自分のお気に入りのPython IDEで作成できます。

Objector 48B
それだけ?

Hypothesizer 7
マダム、あなたはただ、どのディレクトリ配下にPythonマクロが置かれるべきをお知りになる必要があるだけです。

Objector 48B
それはどこなの?

Hypothesizr 7
その位置は、Linuxでは、'~/.config/libreoffice/4/user/Scripts/python'、Windowsでは、'C:\Users\%user name%\AppData\Roaming\LibreOffice\4\user\Scripts\python'、またはそれに類似のものです(プロダクトやバージョンによって若干の違いがあるかもしれません)。

もしも、モジュールをあるパッケージ内に入れたいのであれば、そのパッケージディレクトリをベースディレクトリ配下に作成されればよいだけです。

Objector 48B
えーと、マクロは任意のPythonモジュールでいいの?つまり、なんらかの要件に適合する必要はないの、クラスが特定のクラスを拡張しなければならないとか?

Hypothesizer 7
実のところ、あなたのマクロファンクションは、ただの普通のPythonファンクションです。

Objector 48B
でも、ファンクション内に何を書けるの?

Hypothesizer 7
何でも(少なくとも、ほとんど)、しかし、もしも、ファンクションがUNOドキュメント群を操作したいのであれば、もちろん、それは、特定の方法で行われなければなりません。

Objector 48B
どのように、具体的には?

Hypothesizer 7
そうした詳細は、以降のいくつかの記事で取り扱われます。


3: アプリケーション所有Pythonマクロを作成する方法


Hypothesizer 7
アプリケーション所有Pythonマクロを作成するために、ユーザー所有Pythonマクロを作成するのと異なることは、どのディレクトリ配下にPythonモジュールが位置するべきかだけです。

具体的には、それは、LibreOfficeまたはApache OpenOfficeプロダクトディレクトリ内の'share/Scripts/python'です。


4: テスト


Hypothesizer 7
ユーザー所有Pythonマクロのテストとして、あるPythonモジュールをベースディレクトリ配下に以下のコンテンツで作成しましょう。

'theBiasPlanet/pythonEnvironmentChecker/macros/PythonEnvironmentChecker.py'

@Python ソースコード

import sys
from com.sun.star.frame import XDesktop2
from com.sun.star.lang import XComponent
from com.sun.star.script.provider import XScriptContext
from com.sun.star.text import XText

XSCRIPTCONTEXT: XScriptContext

def checkPythonEnvironment () -> None:
	l_unoDesktop: XDesktop2 = XSCRIPTCONTEXT.getDesktop ()
	l_currentUnoDocument: XComponent = l_unoDesktop.getCurrentComponent ()
	if hasattr (l_currentUnoDocument, "Text"):
		l_unoText: XText = l_currentUnoDocument.getText ()
		l_unoText = l_unoText.getEnd ()
		l_unoText.setString ("The Python environment: version -> {0:s}, paths -> {1:s}\n".format (sys.version, str (sys.path)))
		return None

すると、'theBiasPlanet.pythonEnvironmentChecker.macros.PythonEnvironmentChecker.checkPythonEnvironment ()'メソッドが、'theBiasPlanet.pythonEnvironmentChecker.macros.PythonEnvironmentChecker.checkPythonEnvironment ()'マクロファンクションとして認識されます。

ト書き
Hypothesizer 7は、あるWriterドキュメントがカレントになっている、あるLibreOfficeインスタンスを操作して、'Tools(ツール)' -> 'Macros(マクロ)' -> 'Run Macro...(マクロを実行)' -> 'My Macros(マイマクロ)' -> 'theBiasPlanet' -> 'pythonEnvironmentChecker' -> 'macros' -> 'PythonEnvironmentChecker' -> 'checkPythonEnvironment' -> 'Run(実行)'を選択する。以下がそのドキュメントに書かれる。

@出力
The Python environment: version -> 3.8.2 (default, Jul 16 2020, 14:00:26) 
[GCC 9.3.0], paths -> ['/home/tanichida/myApplications/libraries/python/ZSI-2.0-py2.7.egg', '/usr/lib/libreoffice/program', '/home/tanichida/myApplications/libraries/python', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/tanichida/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/libreoffice/program']

Hypothesizer 7
ここで、テスト用に、アプリケーション所有Pythonマクロを作成する必要は、特にないでしょう、なぜなら、'HelloWorld.py'のような、いくつかの組み込まれたサンプル群があるからです。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>