** [[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
|