メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年12月26日金曜日

[work][OpenOffice][SDK][java] FirstStepメモ(4) サンプル

リモートのサービスマネージャからDesktopオブジェクトもらって
そいつのloadComponentFromURL()メソッド使って新しいスプレッドシートでも作ってみて、
そいつにシートつけて、そのシートのA1、A2、A3に値を入れるてみるサンプルらしい。

A3はA1とA2の合計値。


で、今回のきもっぽいところだけ。

1) 例のbootstrap()便利関数で、officeの起動とかやってもらって、リモートコンテキストを
取得する。


xRemoteContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
 


2) 取得したリモートコンテキスト使ってサービスマネージャを取得する。

xRemoteServiceManager = xRemoteContext.getServiceManager();
 


3) サービスマネージャのcreateInstanceWithContext()メソッド使ってDesktopオブジェクト
を取得する。


Object desktop = xRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", xRemoteContext);
 


4) queryする。

XComponentLoader xComponentLoader = (XComponentLoader)UnoRuntime.queryInterface(
XComponentLoader.class, desktop);
 


5) xComponentLoader.loadComponentFromURLメソッド使ってスプレッドシートコンポーネントを
取得。

XComponent xSpreadsheetComponent = xComponentLoader.loadComponentFromURL(
"private:factory/scalc", "_blank", 0, loadProps);
 

loadPropsにはプロパティがセットされるらしい。
"private:factory/scalc"って指定するとスプレッドシートコンポーネントが取得できるっぽい。

6) queryしてXSpredsheetDocument取得。

XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument)UnoRuntime.queryInterface(
XSpreadsheetDocument.class, xSpreadsheetComponent);
 



7) スプレッドシートコンテナなるものを取得。

XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
 


8) 新しいシート作成。


xSpreadsheets.insertNewByName("MySheet", (short)0);
 


9) 新しいシートを操作したいので、新しいシート"MySheet"を取得。

Object sheet = xSpreadsheets.getByName("MySheet");
XSpreadsheet xSpreadsheet = (XSpreadsheet)UnoRuntime.queryInterface(
XSpreadsheet.class, sheet);
 

うーん。面倒くさい。。
取得・クエリーはいつもセット??


10) そしたら、各セルに値をセット。A1は(0,0)、A2は(0,1)、A3は(0.2)らしい。

XCell xCell = xSpreadsheet.getCellByPosition(0, 0);
xCell.setValue(21);

xCell = xSpreadsheet.getCellByPosition(0, 1);
xCell.setValue(21);

xCell = xSpreadsheet.getCellByPosition(0, 2);
xCell.setFormula("=sum(A1:A2)");
 


11) その他いろいろプロパティセット。



--
今のところ、毎回queryするのが面倒。
これはこれで言語非依存のインタフェースを実現するにはやむ負えないのかもしれないけど。

.

0 コメント: