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

2008年12月30日火曜日

[work][OpenOffice][SDK][java]Spreadsheet Documents読み中(2) 新しいシートを追加してみる

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Example:_Adding_a_New_Spreadsheet
を読む。

Example: Adding a New Spreadsheet
やりたいことはSpreadsheetにシートを追加するだけ。
で、その手順は、

  1. com.sun.star.comp.helper.Bootstrap.bootstrap()を使って、リモートのXComponentContextを取得する。
  2. XComponentContext.createInstanceWithContext()を使ってDesktopを取得する。
  3. queryして、DesktopからXComponentLoaderを取り出す
  4. "private:factory/scalc"というURLを指定してscalcのコンポーネントをロード。
  5. queryして、上記で取得したObjectからXSpreadsheetDocumentを取り出す。
  6. XSpreadsheetDocumentからシートのコレクションを取得する。
  7. シートのコレクションに対してinsertNewByName()をコールする。


とやれば新しいシートを追加できるらしい。

で、やってみたソース。

import com.sun.star.beans.PropertyValue;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.sheet.XSpreadsheets;
import com.sun.star.uno.RuntimeException;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;

public class NewSpreadsheet {
public static void main(String[] args) {
try {
/* リモートコンテキストの取得 */
XComponentContext xContext = Bootstrap.bootstrap();

/* リモートサービスマネージャを取得 */
XMultiComponentFactory xServiceManager = xContext.getServiceManager();

/* リモートデスクトップUNOサービスのインスタンスを取得 */
Object desktop = xServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", xContext );

/* queryしてXComponentLoaderを取り出す */
XComponentLoader xComponentLoader =
(XComponentLoader)UnoRuntime.queryInterface(XComponentLoader.class, desktop );

/* スプレッドシートドキュメントのロード */
/* 全てDocumentというもので扱う */
String loadURL = "private:factory/scalc";
PropertyValue[] loadProps = new PropertyValue[0];
XComponent xComp = xComponentLoader.loadComponentFromURL(loadURL, "_blank", 0, loadProps);
XSpreadsheetDocument doc = (XSpreadsheetDocument)UnoRuntime.queryInterface(
com.sun.star.sheet.XSpreadsheetDocument.class, xComp);
/* シートコレクションの取得 */
XSpreadsheets xSheets = doc.getSheets();
XSpreadsheet xsheet = null;
try {
/* シートコレクションにinsert */
xSheets.insertNewByName("うんこ", (short)0);
/* シートコレクションから追加したシートを取り出してみる */
xsheet = (XSpreadsheet)xSheets.getByName("うんこ");
} catch (Exception ex) {
ex.printStackTrace();
}
}
catch (java.lang.Exception e){
e.printStackTrace();
}
finally {
System.exit(0);
}
}
}
 


ほっほー。

・・・保存しないとシートが追加されたかわからん。
.

0 コメント: