LibreOffice Calcでシートを他ドキュメントにコピーする

コピー先ドキュメントを指定する場合は args(0).Value の箇所にTitleを指定する。TitleはgetArgs()メソッドで取得できる配列から取得する。※ドキュメントのウインドウタイトルとは異なるので注意

Dim newSheetName As String
newSheetName = "コピー先"
ThisComponent.Sheets.copyByName("コピー元シート名", newSheetName, 0)
ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName(newSheetName))
Dim document as Object
Dim dispatcher as Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args(2) as new com.sun.star.beans.PropertyValue
args(0).Name = "DocName"
args(0).Value = ""
args(1).Name = "Index"
args(1).Value = 32767
args(2).Name = "Copy"
args(2).Value = false
dispatcher.executeDispatch(document, ".uno:Move", "", 0, args())

LibreOffice CalcのVBでドキュメントの新規追加・編集・保存・閉じる

Dim document As Object

document = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())
'document = StarDesktop.loadComponentFromURL(ConvertToUrl("C:\Users\hiro\Desktop\test.ods"), "_blank", 0, Array())

Dim sheet As Object
sheet = document.CurrentController.ActiveSheet
sheet.getCellByPosition(4, 4).setValue 2

document.storeAsURL(ConvertToUrl("C:\Users\user\Desktop\test.ods"), Array())

document.dispose

LibreOffice CalcのVBでシートやセルを操作する

現在の位置にあるセルを取得する。

ThisComponent.CurrentSelection

セルの選択。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5))
ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2:C2"))

セルから数値を取得・セルに数値をセット。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5).getValue()
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2").setValue 1234

セルから文字列を取得・セルに文字列をセット。

ThisComponent.CurrentController.ActiveSheet.getCellByPosition(3, 0).getString()
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B1").setString "test1"

セルの行と列番号を取得する。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellAddress.Column
ThisComponent.Sheets.getByName("シート名").getCellByPosition(3, 0).CellAddress.Row

セルの文字に色付け。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CharColor = rgb(255,0,0)
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CharColor = rgb(255,0,0)

セルの背景に色付け。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellBackColor = rgb(0,255,0)   
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CellBackColor = rgb(0,255,0)

範囲を指定してセルをコピーする。

Dim sheet As Object
sheet = ThisComponent.Sheets.getByIndex(0)
'選択範囲をコピーする
sheet.copyRange(sheet.getCellRangeByName("コピー先").getCellAddress(), sheet.getCellRangeByName("コピー元").getRangeAddress())
'行をコピーする
sheet.copyRange(sheet.getCellRangeByName("A1").getCellAddress(), sheet.Rows(1).getRangeAddress())

指定範囲の内容や書式をすべてクリア。

ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(4).clearContents(511)

指定範囲の値のみをクリア。

ThisComponent.Sheets.getByName("シート名").getRows.getByIndex(6).clearContents(5)

指定範囲を削除。
(第二引数:1=UP、2=LEFT)

Dim sheet As Object
sheet = ThisComponent.Sheets.getByName("シート名")
sheet.removeRange(sheet.getCellRangeByName("A3:D10").RangeAddress, 1)

行の選択。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(0))

行の追加。

ThisComponent.Sheets.getByName("シート名").getRows.insertByIndex(3, 1) '挿入位置/追加行数

行の削除。

ThisComponent.Sheets.getByIndex(0).getRows.removeByIndex(3, 1) '削除位置/削除行数

列の選択。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getColumns.getByIndex(0))

列の追加。

ThisComponent.Sheets.getByName("シート名").getColumns.insertByIndex(3, 1) '挿入位置/追加列数

列の削除。

ThisComponent.Sheets.getByIndex(0).getColumns.removeByIndex(3, 1) '削除位置/削除列数

現在のシートを取得する。

ThisComponent.CurrentController.ActiveSheet

シートを選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名"))

シートの追加。

ThisComponent.Sheets.insertNewByName("新規シート名", 0)

シートの削除。

ThisComponent.Sheets.removeByName("シート名")