ディスパッチの利用
OpenOfficeを操作する方法にディスパッチを利用する方法があります。ディスパッチは「ユーザの操作」をプログラム化するイメージで利用します。例えば、マウス操作でシートやセルを選んだり、メニューを使ったりということをサポートしたもので、「マクロの記録」を実行して自動的に作られたマクロもディスパッチを使っています。ですので、まずOpenOfficeアプリケーションでの「マクロの記録」で作られたマクロを元にプログラムを書けるという気軽さがメリットです。
ただ、ディスパッチでは操作できないもの(例えば挿入画像ファイルの表示サイズの指定など)が多くありますので、利用に際しては注意が必要です。シートやセルを選ぶといった簡単な操作はディスパッチを使うと便利です。
ここではCalcでディスパッチを使用する例を示します。
//コンポーネントコンテキストの取得 unoidl.com.sun.star.uno.XComponentContext localContext = uno.util.Bootstrap.bootstrap(); //サービスマネージャの取得 unoidl.com.sun.star.lang.XMultiServiceFactory multiServiceFactory = (unoidl.com.sun.star.lang.XMultiServiceFactory)localContext.getServiceManager(); //コンポーネントローダの取得 unoidl.com.sun.star.frame.XComponentLoader componentLoader = (unoidl.com.sun.star.frame.XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop"); //コンポーネントの取得 unoidl.com.sun.star.lang.XComponent component = componentLoader.loadComponentFromURL("private:factory/scalc", "_blank", 0, new unoidl.com.sun.star.beans.PropertyValue[0]) //ディスパッチヘルパの取得 unoidl.com.sun.star.frame.XDispatchHelper dispatchHelper = (unoidl.com.sun.star.frame.XDispatchHelper)multiServiceFactory.createInstance("com.sun.star.frame.DispatchHelper"); //ディスパッチプロバイダの取得 unoidl.com.sun.star.frame.XDispatchProvider dispatchProvider = (unoidl.com.sun.star.frame.XDispatchProvider)multiServiceFactory.createInstance("com.sun.star.frame.Desktop"); //シートの移動 unoidl.com.sun.star.beans.PropertyValue[] args1 = new unoidl.com.sun.star.beans.PropertyValue[1];unoidl.com.sun.star.beans.PropertyValue pval = new unoidl.com.sun.star.beans.PropertyValue(); pval.Name = "Nr"; pval.Value = new uno.Any(2); args1[0] = pval; pval = null; dispatchHelper.executeDispatch(dispatchProvider, ".uno:JumpToTable", "", 0, args1); //セルの移動 unoidl.com.sun.star.beans.PropertyValue[] args2 = new unoidl.com.sun.star.beans.PropertyValue[1]; pval = new unoidl.com.sun.star.beans.PropertyValue(); pval.Name = "ToPoint"; pval.Value = new uno.Any("$D$9"); args2[0] = pval; pval = null; dispatchHelper.executeDispatch(dispatchProvider, ".uno:GoToCell", "", 0, args2); //現在セル位置への画像の貼り付け unoidl.com.sun.star.beans.PropertyValue[] args3 = new unoidl.com.sun.star.beans.PropertyValue[2]; pval = new unoidl.com.sun.star.beans.PropertyValue(); pval.Name = "FileName"; pval.Value = new uno.Any("file:///C:/sample.jpg"); args3[0] = pval; pval = null; pval = new unoidl.com.sun.star.beans.PropertyValue(); pval.Name = "AsLink"; pval.Value = new uno.Any(false); args3[1] = pval; pval = null; dispatchHelper.executeDispatch(dispatchProvider, ".uno:InsertGraphic", "", 0, args3);