Top > OOobbs2 > 52
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to OOobbs2/52.

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

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