Top > OOobbs2 > 152

OOobbs2/152 Edit

  • サマリ: ドキュメント間のシートのコピー(Java)
  • 環境: Calc
  • 状態: 解決
  • 投稿者: 初級Javaかき?
  • 投稿日: 2008-11-04 (火) 10:26:53

質問 Edit

OOo掲示板の過去の内容で、ドキュメント間のシートのコピーを する方法を見つけたのですが、Basicで書かれています。

同様の内容をJavaでプログラミングする場合、どう書けばよいの でしょうか?

どなたか教えていただけませんでしょうか?

回答 Edit

コンパイラが入っていないので BeanShell で書きます。自分では一行しか書いてませんが・・・。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
!
-
|
|
!
!
 
 
 
 
 
 
import com.sun.star.frame.XDesktop;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.container.XIndexAccess;
import com.sun.star.lang.IndexOutOfBoundsException;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.sheet.XSheetLinkable;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.sheet.XSpreadsheets;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.uno.XInterface;
 
//XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
//XMultiComponentFactory xServiceManager = xContext.getServiceManager();
 
public void snippet(XInterface oInitialTarget)
{
    try{
        XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(
            XSpreadsheetDocument.class, oInitialTarget );
        XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
        
        XIndexAccess xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
            XIndexAccess.class, xSpreadsheets );
        XSpreadsheet xSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(
            XSpreadsheet.class, xIndexAccess.getByIndex( 0 ));
        
        XSheetLinkable xSheetLinkable = (XSheetLinkable) UnoRuntime.queryInterface(
            XSheetLinkable.class, xSpreadsheet );
        xSheetLinkable.link( "file:///E:/usr/test.ods", "Sheet1", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL );
        
    }
    catch(WrappedTargetException e1){
        // getByIndex
        e1.printStackTrace(System.err);
    }
    catch(IndexOutOfBoundsException e2){
        // getByIndex
        e2.printStackTrace(System.err);
    }
}
 
 
oDoc = XSCRIPTCONTEXT.getDocument();
 
snippet(oDoc);
return 0;

最後の三、四行と最初の二行以外は OOoBasic/Macros/MRI で自動的に作成されたコードです。

  • はにゃ? 2008-11-04 (火) 19:59:36
  • 回答ありがとうございます。言葉が足らず申し訳ありません。OOobbs68の内容にについてだったのですが。 -- 初級Javaかき2 2008-11-05 (水) 15:54:25
  • java だと何倍か時間がかかるので嫌ですが。
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XController;
import com.sun.star.frame.XDesktop;
import com.sun.star.frame.XDispatchHelper;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XModel;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
 
 
XComponentContext xCtx = XSCRIPTCONTEXT.getComponentContext();
XMultiComponentFactory xMCF = xCtx.getServiceManager();
 
// create desktop and loader
Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xCtx);
XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(
    XComponentLoader.class, oDesktop);
 
// create dispatch helper
Object dispatchHelper = xMCF.createInstanceWithContext("com.sun.star.frame.DispatchHelper", xCtx);
XDispatchHelper xDispatchHelper = (XDispatchHelper) UnoRuntime.queryInterface(
    XDispatchHelper.class, dispatchHelper);
 
// loading test document
Object oDoc = xComponentLoader.loadComponentFromURL("file:///E:/usr/test.ods", "_blank", 0, new PropertyValue[0]);
XModel xDocModel = (XModel) UnoRuntime.queryInterface(XModel.class, oDoc);
 
XController  xDocController = (XController) UnoRuntime.queryInterface(
XController.class, xDocModel.getCurrentController());
 
XDispatchProvider xDocDispatchProvider = (XDispatchProvider) UnoRuntime.queryInterface(
    XDispatchProvider.class, xDocController);
 
// select all and copy it
xDispatchHelper.executeDispatch(xDocDispatchProvider, ".uno:SelectAll", "", 0, new PropertyValue[0]);
xDispatchHelper.executeDispatch(xDocDispatchProvider, ".uno:Copy", "", 0, new PropertyValue[0]);
 
// new doc to paste
Object oNewDoc = xComponentLoader.loadComponentFromURL("private:factory/scalc", "_blank", 0, new PropertyValue[0]);
XModel xNewDocModel = (XModel) UnoRuntime.queryInterface(XModel.class, oNewDoc);
 
XController  xNewDocController = (XController) UnoRuntime.queryInterface(
XController.class, xNewDocModel.getCurrentController());
XDispatchProvider xNewDocDispatchProvider = (XDispatchProvider) UnoRuntime.queryInterface(
    XDispatchProvider.class, xNewDocController);
 
 
xDispatchHelper.executeDispatch(xNewDocDispatchProvider, ".uno:Paste", "", 0, new PropertyValue[0]);
 
return 0;
  • はにゃ? 2008-11-06 (木) 13:27:05

感想,コメント,メモ Edit

  • はにゃ?さん、追記頂きありがとうございました。 今回の件でシートリンクの使い方がよくわかりました。 確かにDispatchHelperを使った場合と、シートリンクを 使った場合とではかなり時間のかかり方が違いますね。 私のPCでは、20kb程度のExcel形式の3ファイルから1つのファイルへ シートコピーするのにDispatchHelperで約27秒、シートリンクで2秒でした。 Webアプリの開発として、今回の内容がすごく役に立ちました。 ありがとうございました。 初級Javaかき2 2008-11-06 (木) 16:24:49
  • Copy の場合もちろんクリップボード経由になります (OOo 内蔵のものですが、OS のクリップボードのほうにも影響があります)。その場合、OOo の Calc でシート (やセル範囲) をコピーした場合には一部分のみを含む ods ファイルのデータがクリップボードの内容として作成されます。そして、貼り付け時にはファイルのデータが解析されてペーストされます。リンクでもファイルが開かれるわけですが・・・。あまり関係ありませんが、クリップボード関連: OOoBasic/Generic/XTransferable。 -- はにゃ? 2008-11-06 (木) 16:56:22


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes