OOobbs2/100
質問
複数行(列)を指定し、別のシートへコピーするにはどのようにすればよろしいのでしょうか? また、セルの内容だけではなく、行高や列幅も同時にコピーは可能なのでしょうか? 回答
さてさて、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。
以下の例では、最初のシートの列 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
感想,コメント,メモ
|