LibreOffice5(101)埋め込みマクロの更新とマクロセレクターとAPSO

2017-12-03

旧ブログ

t f B! P L
埋め込みマクロをマクロで更新するときに、そのマクロをマクロセレクターで呼び出すかAPSOで呼び出すかで結果が異なりました。不一致を防ぐには埋め込みマクロを更新したあとはドキュメントを閉じて開き直さないといけません。

前の関連記事:LibreOffice5(100)埋め込みマクロを書きこむマクロの例


マクロセレクターで実行するマクロで更新した埋め込みマクロはドキュメントを開いてる間は1回しか変更できない


ステップ1

まずLibreOffice5(100)埋め込みマクロを書きこむマクロの例のその3以外のいずれかのマクロでCalcドキュメントにマクロを埋め込みます。

今回はその4のマクロを使いました(このマクロをwriteEmbeddedScripts.pyとします)。

ステップ2

マクロを実行できるように一旦ドキュメントを保存して閉じて、マクロを有効化してドキュメントを開き直します。

埋め込みマクロを実行するとA1セルにテキストが出力されます。

これは想定通りです。

ステップ3

そのドキュメントを開いたまま、今度はwriteEmbeddedScripts.pyで書き込むマクロのセルをA2に変更して、先ほどと同様にして同じドキュメントにwriteEmbeddedScripts.pyでマクロを書き込みます。

これで埋め込みマクロを実行したときにテキストの出力先がA1セルからA2セルに変更になっているはずですが、そうはなりません。

元のA1セルのままになっています。

これは想定外です。

ドキュメントを保存してからwriteEmbeddedScripts.pyを実行すると保存アイコンに星が付くので、埋め込みマクロファイルが更新はされているようですが、A2セルに変更する前のマクロファイルが再度書き込まれているだけのようです。

ステップ4

writeEmbeddedScripts.pyで書き込むマクロを変更してその変更したマクロをドキュメントに書き込むには一旦ドキュメントを閉じないといけません。

ドキュメントを閉じて開き直してから、マクロで埋め込みマクロを書き込むとちゃんと更新されます。

つまり、マクロで書き込むマクロはドキュメントを開いている間は1回しか変更できないことになります。

APSOで実行するマクロで更新した埋め込みマクロは制限なく変更できるがマクロセレクターで実行した埋め込みマクロと結果が異なるときがある


LibreOffice5(87)Pythonマクロのための拡張機能APSOのインストールのAPSOで埋め込みマクロを実行する場合は、マクロセレクターと異なります。

上記のステップ1とステップ2をマクロセレクターではなくAPSOで実行します。

ここまではマクロセレクターもAPSOも結果は同じです。

ステップ3

そのドキュメントを開いたまま、writeEmbeddedScripts.pyで書き込むマクロのセルをA2に変更して、APSOからwriteEmbeddedScripts.pyを実行してドキュメントで埋め込みマクロを書き込みます。

マクロセレクターのときと違って、この埋め込みマクロを実行すると想定通りA2セルにテキストが出力されます。

マクロセレクターでwriteEmbeddedScripts.pyを実行したときと違って、APSOで実行するとちゃんと埋め込みマクロが更新されます。

このとき同じ埋め込みマクロをマクロセレクターで実行するとファイルを開いた時のマクロが出力するA1セルになっています。

でもこの動作は一定せずAPSOとマクロセレクターの結果が一致するときもあります。

APSOで埋め込みマクロを変更して、その埋め込みマクロをAPSOで実行するとマクロセレクターでも同じ結果になり、変更後にまずマクロセレクターで実行してしまうと変更前のマクロが常に実行されるようです、、、と思ったらそうでもないようです。

どうもドキュメントを開いてからの変更回数に依存するように思えますが、もう面倒になったので確認していません。

とりあえずマクロで埋め込みマクロを更新したときはAPSOとマクロセレクターでは違うものを実行している可能性があるので注意が必要です。

埋め込みマクロを更新したときはまずそのドキュメントを閉じて開き直すようにすればそような不一致が起こりません。

APSOからエディタで開いたマクロファイルは一時フォルダ内に展開される


APSOでマクロを選択してMenu→Edit、とするとデフォルトエディタで埋め込みマクロファイルが開きます。

このとき埋め込みマクロファイルは一時フォルダに展開されます。

/tmp/lu17288qu3rn6.tmp/3/Scripts/python

例えばこのようなパスになります。

.tmpフォルダ内にContentIdentifierの数値(だいたいファイルの開いた順の番号)のフォルダ内に埋め込みマクロフォルダのパスにpyファイルが展開されています。

このファイルはAPSOのウィンドウが開いている間は監視されているようですが、先にAPSOのウィンドウを閉じてしまうと、エディタで変更した内容が反映されません。

しかし再度APSOウィンドウを開くと一時フォルダのpyファイルが反映されます。

APSOのソースを読んでもどういう仕組みになっているのかはわかりませんでした。

次の関連記事:LibreOffice5(102)ストレージのサービスとインターフェイスの一覧

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ