LibreOffice(3)PyCharmで作ったマクロをLibreOfficeから実行する

ラベル: ,

前の関連記事:LibreOffice(2)Pythonの統合開発環境PyCharmのインストール


Pythonの統合開発環境(IDE)でPythonマクロを実行させればLibreOfficeからマクロを実行したのと同じように動くように設定していきます。順を追って仕組みを理解していきます。

PyCharmでPythonマクロを書いてLibreOfficeから実行させる


前回のuntitledというProjectを作成したところから始めます。

プロジェクトところで右クリック→New→Python File。


ファイル名をtestにして「OK」をクリックします。

def HelloWorld_Writer():
    doc = XSCRIPTCONTEXT.getDocument()
    doc.getText().setString("Hello World!")
test.pyにこれを入力します。

pythonはカッコではなく行頭からの字下げ(インデント)によってコマンドのくくりが解釈されますので行頭の位置は同じくくりのコマンドは同じ位置に揃えないといけません。

defは関数定義をしているという意味です。


これをLibreOfficeから実行してみましょう。

LibreOffice Writerを起動します。

ツール→マクロ→マクロを管理→Python。


マイマクロ→untitiled→test、までたどると先ほど作成したHelloWorld_Writerが表示されていますね。

「実行」をクリックすると「Hello World!」と入力されます。


LibreOfficeからはpyファイルのなかの関数を指定して実行させている


このようにLibreOfficeからPythonスクリプトを実行させるときは関数を指名してPythonマクロを起動します。

test.pyにdef HelloWorld_Writer_No2():を追加してLibreOfficeから見るとマイマクロにHelloWorld_Writer_No2というマクロが追加されていることがわかります。


この状態ではPyCharm側でtest.pyを実行させてもLibreOfficeは何も反応しない


LibreOfficeから呼び出せば「Hello World!」を表示させることができましたが、このままではPyCharm側でtest.pyを実行してもLibreOfficeには何も起こりません。

PyCharmを単にPythonマクロを書くツールとして使うだけならこれ以上の設定はとくに必要はないでしょう。

しかしこれではせっかくのPyCharmのデバッグ機能などが使えません。

ためしにPyCharmでtest.pyを実行してみます。

先ほどのLibreOfficeから実行した時と違ってPyCharmは関数単位ではなく、pyファイル単位で実行します。

test.pyのところで右クリック→Run 'test'。


実行結果が下の枠に表示されます。


Process finished with exit code 0、と表示されています。

exit code 0、というのは正常に終了したという意味です。

しかしLibreOffice Writerには何も起こりません。

これはPyCharmから実行させたときは、XSCRIPTCONTEXTが空っぽだからです。

逆にいえばXSCRIPTCONTEXTをLibreOfficeから実行したときのように中身をいれることができればPyCharmからtest.pyを実行してもLibreOfficeが動くことになります。

参考にしたサイト


A. Python-UNO - N->N->N
Python-UNOについて詳しく解説されています。ここからコードを引用させていただきました。

faq/5/471 - OpenOffice.org Q&A
この問答が理解のきっかけになりました。

次の関連記事:LibreOffice(4)PyCharmからLibreOfficeを動かす(オートメーション)

PR

0 件のコメント:

コメントを投稿