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

0 件のコメント: