http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Example:_Adding_a_New_Spreadsheet
を読む。
Example: Adding a New Spreadsheet
やりたいことはSpreadsheetにシートを追加するだけ。
で、その手順は、
- com.sun.star.comp.helper.Bootstrap.bootstrap()を使って、リモートのXComponentContextを取得する。
- XComponentContext.createInstanceWithContext()を使ってDesktopを取得する。
- queryして、DesktopからXComponentLoaderを取り出す
- "private:factory/scalc"というURLを指定してscalcのコンポーネントをロード。
- queryして、上記で取得したObjectからXSpreadsheetDocumentを取り出す。
- XSpreadsheetDocumentからシートのコレクションを取得する。
- シートのコレクションに対して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 コメント:
コメントを投稿