*他言語のマクロの実行 [#e2730a6e] OOo Basic から Python、Javascript、BeanShell、Java やそのほかの言語でマクロとしてかかれた関数などを実行できます。その逆ももちろん可能です。これを利用すると OOo Basic で出来ないことを他の言語のライブラリに頼って行うことも出来るようになります。 #contents **ScriptProvider [#z209b862] 他のマクロを実行するには言語の ScriptProvider が必要ですが、それを取得するために com.sun.star.script.provider.theMasterScriptProviderFactory singleton を利用します。 oMSPF = GetDefaultContext.getValueByName( _ "/singletons/com.sun.star.script.provider.theMasterScriptProviderFactory") oSP = oMSPF.createScriptProvider("") 他のドキュメントのマクロを実行するときにはドキュメントの ScriptProvider を利用します。 oSP = ThisComponent.ScriptProvider **スクリプトの実行 [#w33f18c7] ScriptProvider から実行したいスクリプトを取得します。スクリプトは特別な URI を利用して指定します。URI に関しては [[OOoBasic/Generic/ScriptingURL]] 参照。 Function jsreg_replace( _ pattern As String, flag As String, replacement As String, subject As String ) As String oMSPF = GetDefaultContext.getValueByName( _ "/singletons/com.sun.star.script.provider.theMasterScriptProviderFactory") oMSP = oMSPF.createScriptProvider("") sScriptUrl = _ "vnd.sun.star.script:mytools_js.jsreg_replace.js?language=JavaScript&location=user:uno_packages/mytools_js.oxt" oScript = oMSP.getScript(sScriptUrl) jsreg_replace() = oScript.invoke( array( pattern, flag, replacement, subject ),array(),array()) End Function invoke メソッドでスクリプトを実行します。実行時に引数を与えることが出来ます。引数は invoke メソッドの最初の引数に配列として与えます。 また、戻り値も受け取ることが出来ます。 **スクリプトで値を受け取り、値を返す [#t52a84e5] invoke されるスクリプトから値を戻したいときには次のようにします。 -OOo Basic Function で定義します。 -Javascript 引数は ARGUMENTS グローバル変数から取得できます。また、返り値はファイルの最後に次のように指定します。(Javascript の実行はファイル指向です。) var result = ""; if ( ARGUMENTS.length >= 4 ) { pattern = String(ARGUMENTS[0]); flag = String(ARGUMENTS[1]); replacement = String(ARGUMENTS[2]); subject = String(ARGUMENTS[3]); re = new RegExp( pattern, flag ); result = subject.replace( re, replacement ); } result; -BeanShell ARGUEMTNS グローバル変数から引数を取得できます。返り値は return で指定します。 if (ARGUMENTS.length == 2) { sUrl = ARGUMENTS[0].toString(); sPostStr = ARGUMENTS[1].toString(); // ........ } return sUrl; BeanShell のコードを OOo の BeanShell エディタで開いていると以下の issue により ARGUMENTS が取得できません。 -http://www.openoffice.org/issues/show_bug.cgi?id=70065 -Python def で関数を定義します。return に返り値を指定すると値を戻せます。配列を戻したいときにはタプルを戻り値にします。 def python_test(arg): return (arg,) |