LibreOffice5(27)MRI - UNO Object Inspection Tool:その3

前の関連記事:LibreOffice5(26)MRI - UNO Object Inspection Tool:その2


どう頑張ってもPyDevのリモートデバッガをMRIに接続することはできませんでした。ソースをいろいろ読んでみましたが「オブジェクト指向」で書いてあるものはあちこち飛ぶのでとても勉強しにくいものです。考えあぐねた挙句オートメーションで実行するようにしたら難なくPyCharmのデバッガで逐次実行できました。

(2016.2.22追記。この記事の方法だとボタンをクリックしたイベントに対するブレイクができません。結局LibreOffice5(28)MRI - UNO Object Inspection Tool:その4でリモートデバッガに接続できました。)

PyCharmのプロジェクトにしているLibreOfficeのマイマクロフォルダにMRIのソースを展開する


PyCharmはlinuxBean14.04(86)AnacondaのパッケージをLibreOfficeマクロで使うの5.0.2です。

Anacondaのパッケージは今回は必要ありませんがlinuxBean14.04(6)LibreOffice4.3.7とPyCharmの設定の設定でPyCharmからLibreOfficeをオートメーションで操作できるようにしておく必要があります。


LibreOfficeのマイマクロフォルダにMRIという名前のフォルダを作成しそこにLibreOffice5(25)MRI - UNO Object Inspection Tool:その1でダウンロードしたMRI-1.3.1.oxtファイルの拡張子をzipに変更してその中身を展開しました。

MRI.pyにオートメーションで実行するためにコードを追加する


MRI.pyの最後に以下のコードを追加しました。
if __name__ == "__main__":
    import unopy
    XSCRIPTCONTEXT = unopy.connect()  # LibreOfficeにソケット接続する。
    if not XSCRIPTCONTEXT:
        print("Failed to connect.")
        import sys
        sys.exit(0)
    import sys
    sys.path.append("pythonpath")  # 拡張機能のpythonpathフォルダをPYTHONPATHに追加する。
    ctx = XSCRIPTCONTEXT.getComponentContext()  # コンポーネントコンテクストの取得。
    obj = XSCRIPTCONTEXT.getDesktop().getCurrentComponent()  # MRIでインスペクトするUNOオブジェクトを取得。ツール→アドオン→MRIと同じオブジェクトを取得。
    create(ctx, obj)
MRIでインスペクトするUNOオブジェクトは何でもよいのですが今回はLibreOffice5(25)MRI - UNO Object Inspection Tool:その1と同様にWriterのドキュメントをインスペクトすることにします。

拡張機能マネージャーにMRIを登録する


config.xcuにあるデフォルト設定値はLibreOfficeに登録しないとPythonから読みこめないのでその目的のためにMRI-1.3.1.oxtを拡張機能マネージャーに登録してLibreOfficeを再起動します。

これになかなか気が付かずに四苦八苦しました。

これで準備完了です。

PyCharmからオートメーションでMRIを実行する


まずソケット接続できるようにしたLibreOfficeを起動しWirterのドキュメントを開きます。

PyCharmのエディタにMRI.pyを開きます。

エディタで右クリック→Run 'MRI'。


オートメーションなので少し時間がかかりますが拡張機能として実行したときと同じようにMRIのウィンドウが表示されました。

ブレークポイントを設定してDebug 'MRI'とすればブレークされて逐次実行できます。

問題は終了方法です。

LibreOfficeのスタートセンターに対して実行した時はMRIのウィンドウは閉じられませんがスタートセンターのウィンドウを閉じることで終了できます。

しかしWriterのに対して実行した時はMRIのウィンドウはFile→Closeしてもウィンドウの閉じるボタンをクリックしても反応しませんし、Writerのドキュメントにしても同じことで強制終了するしかなくなります。

PyCharmのメニューからRun→Stop 'MRI'、としてもPyCharmを終了してもLibreOfficeを終了できません。

仕方ないので強制終了します。

豆ボタン→システムツール→タスクマネージャ。


soffice.binを選択して右クリック→強制終了。

次の関連記事:LibreOffice5(28)MRI - UNO Object Inspection Tool:その4

PR

0 件のコメント:

コメントを投稿