2011年12月12日月曜日

OOo(libreOffice) BasicでEval

ExelのVBAでは、文字列で渡された計算式を実行するためのApplication.Evaluate()ってメソッドがあるけど、OOo(LibreOffice)では見当たらなかったので。
ググると、以下のような投稿を発見。
http://www.oooforum.org/forum/viewtopic.phtml?t=58809

これの一番最後に答えが書いてあって、ようはJavaScriptのEvalを使って計算を行うマクロを作っておいて、それをOOo Basicから呼び出すというコード。まず、以下のようなJavaScriptの一行マクロをドキュメントのLibrary1のEvalCell.jsとして作成。

dResult = eval(String(ARGUMENTS[0]));

んで、そのあと以下のようなOOo Basicのコードで呼び出す、って感じ。

Function Eval(s as String) as Double
  oDocScriptProvider = ThisComponent.getScriptProvider()
  oScript = oDocScriptProvider.getScript("vnd.sun.star.script:Library1.EvalCell.js?language=JavaScript&location=document")

  On Error Resume Next
  Eval = oScript.Invoke(Array(s), Array(1), Array(dResult))
  On Error Goto 0
End Function

1 件のコメント:

Watanabe さんのコメント...

渡辺です。このEVAを使ってLibreoffice_CALCで関数を作成しましたが、起動後に関数を使った場合は正常に使えるのですが、一旦関数を記入し保存、終了して再度CALCを起動すると「BASICランタイムエラー」となり「ScriptProviderが見つかりません」となります。対処方法をご教示願います。

Ubuntu20.04 LibreOffice V.7.6 Calc BASIC or JAV