** [[OOobbs2/52]] [#pd71a8a8] -''サマリ'': ドキュメント間でセル範囲のコピー -''環境'': Calc -''状態'': 解決 -''投稿者'': [[とうし]] -''投稿日'': 2007-07-26 (木) 14:00:59 *** 質問 [#i3dc2237] ひとつのドキュメントでセル範囲をコピーするのは、 oSheet.copyRange( aCellAddress, aCellRangeAddress ) で、できるのですが、違うドキュメント間でセル範囲をコピーする 方法が分かりません。 どなたか教えてください。 *** 回答 [#rf1e6945] - dispatch で行います。DispatchHelper はフレームオブジェクトを必要とするので、コピー元ドキュメントとコピー先ドキュメントのフレームを取得します。 コピー先ドキュメントのフレームの取得はいろいろあると思いますが、下の例では StarDesktop のフレームコンテナからタイトルを調べて取得しています。 Sub Main Dim oDoc As Object, oSourceFrame As Object oDoc = ThisComponent oController = oDoc.CurrentController oSourceFrame = oController.Frame Dispatch(".uno:Copy",oSourceFrame) oFrames = StarDesktop.getFrames() For i = 0 To oFrames.getCount()-1 oDestFrame = oFrames.getByIndex(i) If InStr(oDestFrame.Title,"無題2") Then Dispatch(".uno:Paste",oDestFrame) Exit For End If Next i End Sub sub Dispatch( sCommand As String, oLocFrame As Object) dim dispatcher as object dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(oLocFrame, sCommand, "", 0, Array()) end sub これでほかに問題になるのは、選択範囲がコピーされ、コピー先はカーソル位置が左上になることです。 コピー元とコピー先で特定のセルを選択する必要があります。セル範囲またはセルの選択は CurrentController オブジェクトの select メソッドにオブジェクトを渡すことでできます。[[OOoBasic/Calc/selection]] フレームオブジェクトからドキュメントオブジェクトを取得するには oDestDoc = oDestFrame.Controller.Model -- [[はにゃ?]] &new{2007-07-26 (木) 14:58:33}; #comment *** 感想,コメント,メモ [#x00201d4] #comment |