リモートのサービスマネージャから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 コメント:
コメントを投稿