Top > OOobbs2 > 100

OOobbs2/100 Edit

  • サマリ: 複数行(列)の指定とコピーについて
  • 環境: Calc
  • 状態: 解決
  • 投稿者: ぷにゅ?
  • 投稿日: 2008-04-09 (水) 18:22:21

質問 Edit

複数行(列)を指定し、別のシートへコピーするにはどのようにすればよろしいのでしょうか? また、セルの内容だけではなく、行高や列幅も同時にコピーは可能なのでしょうか?

回答 Edit

さてさて、OOo.Basicを始めて5日目に突入した私が回答するのも何ですが

何事も突撃あるのみ・・・という人生観に従ってやってみましたが

先人諸兄の気に触らなければ、幸いだと・・思います。

取敢えず、マクロの記録が吐き出して来たものはこちらです。

要は、表のコピーで行高・列幅等がコピーされますよ・・・

という事で、吐き出されたものは、冗長すぎると思いますが。

書き直すと、半分ぐらいの行数にはなるでしょう。

まぁ、こんなものでしょうか。

解説が必要ですかね?

REM  *****  BASIC  *****
sub Main
rem -----------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem -----------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -----------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$5:$J$6"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem -----------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem -----------------------------------------------------------------
dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "DocName"
args3(0).Value = "集計表"
args3(1).Name = "Index"
args3(1).Value = 1
args3(2).Name = "Copy"
args3(2).Value = true
dispatcher.executeDispatch(document, ".uno:Move", "", 0, args3())
rem -----------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
rem -----------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "C"
dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args5())
rem -----------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$C$5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
rem -----------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem -----------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Name"
args8(0).Value = "test"
dispatcher.executeDispatch(document, ".uno:RenameTable", "", 0, args8())
end sub

操作の解説

集計表というファイルの、一番目の表のC5からJ5迄を

testと云う表を行高・列幅等を同様にして新たに作成し

表testのC5からJ5に複写して見ました。

貼付先、表testの行の位置が元の行位置と違う場合は

微妙に書き直さなくては・・いかんだろう・・と思います。

やっぱり、Dispatch。されどDispatch。

  • 五日目 2008-04-9 (木)
  • 一応 dispatch を利用しない方法です。

以下の例では、最初のシートの列 A-C を二番目のシートのコピーします。コピーするにはコピーしたい範囲のセル範囲のアドレスと、コピー先の左上のセルのアドレスを指定します。

以下の例の方法では列幅もコピーされました。以下のページも参照してみてください。

Sub cellrange_10
Dim oDoc As Object, oSheet As Object
Dim aCellAddress As New com.sun.star.table.CellAddress
Dim aCellRangeAddress As New com.sun.star.table.CellRangeAddress

  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oColumns = oSheet.getColumns()
  oStartCol = oColumns.getByIndex(0) ' A
  oEndCol = oColumns.getByIndex(2) ' C
  
  With aCellAddress
    .Sheet = 1
    .Column = 2
    .Row = 0
  End With
  
  ' source range
  With aCellRangeAddress
     .Sheet = 0
     .StartColumn = oStartCol.getRangeAddress().StartColumn
     .EndColumn = oEndCol.getRangeAddress().StartColumn
     .StartRow = 0
     .EndRow = oStartCol.getRangeAddress().EndRow
  End With
  oSheet.copyRange( aCellAddress, aCellRangeAddress )
End Sub
  • はにゃ? 2008-04-10 (木) 03:54:11
  • 五日目さん、解説まで付けて頂いての回答ありがとうございます。シート丸ごとコピーしてしまうという方法もあったんですね。 -- ぷにゅ 2008-04-10 (木) 10:32:28
  • はにゃさん、回答ありがとうございます。セル範囲ということで、行(列)の指定とは違うのでは?と思っていました。getColumnsをgetRowsに置き換え行高もコピーできました。 -- ぷにゅ 2008-04-10 (木) 11:12:22

感想,コメント,メモ Edit



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