2020年11月22日日曜日

50: Pythonマクロ群を格納するLibreOffice拡張機能を作成する

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

本テクニックは、OpenOffice拡張機能にも使えるはずです。拡張機能を使えば、自分のPythonマクロ群を便利に配布できます。

話題


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

この記事の目次


開始コンテキスト


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

ターゲットコンテキスト



  • 読者は、任意のPythonマクロ群を格納するLibreOfficeまたはApache OpenOffice拡張機能を作成する方法を知る。

オリエンテーション


ユーザー所有またはアプリケーション所有のPythonマクロを作成することは、ある以前の記事にて取り扱われました。

ドキュメント内Pythonマクロを作成することは、前記事にて取り扱われました。

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

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

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

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


本体


1: Pythonマクロの集合を自分のLibreOfficeまたはApache OpenOffice拡張機能に入れて配布できる


Hypothesizer 7
もしも、LibreOfficeまたはApache OpenOffice Pythonマクロの集合を配布されるのであれば、それらを拡張機能内に含めるのは、良いオプションかもしれません。

Objector 50A
「拡張機能」というのは、'Extension Manager...(拡張機能マネージャー)'メニュー項目でインストールできるやつだろう?

Hypothesizer 7
はい、そうです、サー。

Objector 50A
LibreOffice拡張機能なんて、だれか他の人が作るものだと思っていたが。

Hypothesizer 7
. . .その「だれか」があなたであってならない理由はありません、サー。

Objector 50A
でも、難しいんだろう?「拡張機能」なんて、響きが難しそうだ。

Hypothesizer 7
ご自分の拡張機能を作成されるのは、とても容易です、実のところ。

Objector 50A
お前みたいなやつらはそうやって簡単に言うんだよな!

Hypothesizer 7
えーと、LibreOfficeまたはApache OpenOffice拡張機能は、実際にはZIPファイルです。あなたはZIPファイルを作成できませんか?

Objector 50A
みくびるな!ZIPファイルぐらい作れるわ!

Hypothesizer 7
ファイルの編集もお出来になるでしょう?

Objector 50A
ファイルを編集できなくて、どうやってPythonマクロを作成できるんだ?

Hypothesizer 7
まったくです、サー。

Objector 50A
だが、長いファイルなど編集したくないぞ。

Hypothesizer 7
えーと、ここにある私のサンプルは、351バイト長です。

Objector 50A
お前のサンプルは特別に短いんだろう?

Hypothesizer 7
実のところ、そのサンプルをそのままお使いになることができます、もしも、拡張機能に他の種類の作成物を含めないのであれば。

Objector 50A
ふむ、それですべてか?

Hypothesizer 7
いくつかディレクトリを作成し、ご自分のマクロファイル群をコピーできる必要もあります。

Objector 50A
だと思ったよ!そうやって次々と追加していくんだ。「これができないといけない、あれができないといけない」、などなどと!見下げはてたやつだ!

Hypothesizer 7
実のところ、それですべてです。

Objector 50A
. . .

Objector 50B
本当に拡張機能を作る必要があるの?マクロファイル群をコピーすればいいだけじゃないの?

Hypothesizer 7
よいかもしれません、マダム。ある以前の記事に記述されているとおり、マクロファイルは、特定の位置に置いただけで、マクロとして認識されます。

しかしながら、ユーザー所有マクロファイルの位置は環境によって異なるかもしれませんし、ユーザーはマクロファイルをアプリケーション所有マクロ位置にコピーする権限を持っていないかもしれません。また、関連するいくつかの他のファイルをその拡張機能内にパックすることは望ましいでしょう。

Objector 50B
「関連するいくつかの他のファイル」ってどういう意味?

Hypothesizer 7
あなたは、いくつかのUNOサービス(Javaで実装された、例えば)、いくつかのGUIコンフィギュレーションファイル、いくつかのキーバインディングコンフィギュレーションファイルも配布されるかもしれません。

Objector 50B
ああ、マクロを呼ぶメニュー項目を追加する. . .


2: 拡張機能を作成する


Hypothesizer 7
拡張機能を作成しましょう。

第1に、拡張機能の中身のベースディレクトリを作成します。

ト書き
Hypothesizer 7は、目の前のLinuxコンピューターでターミナルを開き、カレントディレクトリを特定の位置に移す。

Objector 50A
ターミナルを使ってるじゃないか!カレントディレクトリを変更してるじゃないか!

Hypothesizer 7
それが問題ですか?

Objector 50A
それらができなければならないと言わなかったじゃないか!嘘つきやがって!

Hypothesizer 7
いいえ、つきませんでした: それらは特に必須ではありません。あなたは操作をなんらかのファイル群エクスプローラで行なうことができます、もしも、そうお望みでしたら。

Objector 50A
うむう. . .

ト書き
Hypothesizer 7は、以下のコマンド群を実行する。

@bash ソースコード
mkdir extensionAIngredients
cd extensionAIngredients

Hypothesizer 7
メタファイル群ディレクトリおよびPythonマクロ群ベースディレクトリを作成します。

ト書き
Hypothesizer 7は、以下のコマンド群を実行する。

@bash ソースコード
mkdir META-INF
mkdir -p Scripts/python

Hypothesizer 7
Pythonモジュールファイル群またはPythonパッケージディレクトリ群をPythonマクロ群ベースディレクトリへコピーします。

ト書き
Hypothesizer 7は、以下のコマンドを実行する。

@bash ソースコード
cp -r %somewhere%/theBiasPlanet Scripts/python/.

Objector 50A
はあ?その「theBiasPlanet」ってやつはなんだ?

Hypothesizer 7
それは私のPythonパッケージディレクトリであり、その配下に1つのPythonモジュールファイル、'pythonEnvironmentChecker/macros/PythonEnvironmentChecker.py'があります。

Objector 50A
ああ、それじゃあ、Pythonマクロたちは、そういう深いディレクトリ内にいてもよいと. . .

Hypothesizer 7
そして、1つのマニフェストファイル、'META-INF/manifest.xml'を編集します、以下のコンテンツで。

@manifest.xml ソースコード
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="Scripts/python"/>
</manifest:manifest>

ト書き
Hypothesizer 7は、以下のコマンドを実行し、上記コンテンツをそこに入れ、ファイルをセーブする。

@bash ソースコード
vim META-INF/manifest.xml

Hypothesizer 7
内容物が完全に準備されたので、ついに、拡張機能ファイルを作成します。

ト書き
Hypothesizer 7は、以下のコマンドを実行する。

@bash ソースコード
zip -r ../theBiasPlanet.pythonEnvironmentChecker.unoExtension.oxt *

Objector 50A
. . . . . .それから?

Hypothesizer 7
それで全てです: 'theBiasPlanet.pythonEnvironmentChecker.unoExtension.oxt'が拡張機能です。

Objector 50A
それじゃあ簡単すぎるだろう?

Hypothesizer 7
とても容易だと私は申しました。


3: テストする


Hypothesizer 7
当該拡張機能をインストールしましょう。

ト書き
Hypothesizer 7は、LibreOfficeインスタンスを開始させ、'Tools(ツール)' -> 'Extension Manager...(拡張機能マネージャー)' -> 'Add(追加)' -> 当該拡張機能 -> 'Open' -> 'Only for me' -> 'Close(閉じる)' -> 'Restart Now(すぐに再起動)'を選択する。LibreOfficeインスタンスが再び起動する。

Hypothesizer 7
当該拡張機能内のあるマクロファンクションを実行しましょう。

ト書き
Hypothesizer 7は、あるWriterドキュメントをオープンし、'Tools(ツール)' -> 'Macros(マクロ)' -> 'Run Macro...(マクロを実行)' -> 'My Macros(マイマクロ)' -> 'theBiasPlanet.pythonEnvironmentChecker.unoExtension.oxt' -> 'theBiasPlanet' -> 'pythonEnvironmentChecker' -> 'macros' -> 'PythonEnvironmentChecker' -> 'checkPythonEnvironment' -> 'Run(実行)'を選択する。いくつかの文字列が当該ドキュメントへ書かれる。

Objector 50A
じゃあ、失敗したわけか?

Hypothesizer 7
. . .成功いたしました。


参考資料


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