カテゴリー別アーカイブ: Libre Basic

Libre:069 セルデータの数値のみコピーする

これは、数値かどうかを判定するところ新しく、

それ以外は今までのコードを組み合わせて実現できそうです。

 

sub ksIsNumeric

dim sheet as object
dim cell as object

Sheet =ThisComponent.sheets (0)
cell = Sheet.getCellByPosition(0,0)

if (isNumeric(cell.value)) then
msgbox “YES”
end if

end sub

 

上のコードは何時でもYESを返します。

msgboxを以下のように変更してみると

理由は簡単です。

msgbox “YES” & cell.value &” :” & cell.string

 

YES0:a ・・・・(0,0)にaを代入してある場合

 

というわけで、何時でもYESであるらしい。

こういうところが面倒くさいと思うんだけど、

Cell.Typeを使用すれば、解決できそうです。

 

sub ksIsNumeric

dim sheet as object
dim cell as object

Sheet =ThisComponent.sheets (0)
cell = Sheet.getCellByPosition(0,0)

Select Case cell.Type
Case com.sun.star.table.CellContentType.EMPTY
MsgBox “Content: Empty”
Case com.sun.star.table.CellContentType.VALUE
MsgBox “Content: Value”
Case com.sun.star.table.CellContentType.TEXT
MsgBox “Content: Text”
Case com.sun.star.table.CellContentType.FORMULA
MsgBox “Content: Formula”
End Select

end sub

Libre:068 選択範囲を切り取る

067との違いは、最後のcopyRangeをmoveRangeに変えるだけです。

 

Sub ksCopyRange

Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress

Sheet =ThisComponent.sheets (0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5

Sheet.moveRange(CellAddress, CellRangeAddress)

End SUb

Libre:067 選択範囲をコピーする

以下の例では、B2:C3の範囲のセルをA6を先頭とする位置にコピーします。

 

Sub ksCopyRange

Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress

Sheet =ThisComponent.sheets (0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5

Sheet.copyRange(CellAddress, CellRangeAddress)

End SUb

Libre:064 行列を再表示する

063と同じようにRowsプロジェクトを取得し、

isVisibleをTrueに設定します。

 

Sub HideOrShowRow()
Dim objSheet As Object
Dim objCell As Object
Dim objRow As Object

objSheet = ThisComponent.CurrentController.ActiveSheet
objCell = objSheet.getCellRangeByName(“A3”)
objRow = objCell.Rows
objRow.IsVisible = True


End Sub

Libre:063 行列の非表示

Rowオブジェクトを取得し、

isVisibleプロパティをFalseにする。

 

Sub HideOrShowRow()
Dim objSheet As Object
Dim objCell As Object
Dim objRow As Object

objSheet = ThisComponent.CurrentController.ActiveSheet
objCell = objSheet.getCellRangeByName(“A3”)
objRow = objCell.Rows
objRow.IsVisible = False


End Sub

Libre:060 セル範囲の行数、列数を数える

選択範囲のアドレスを取得します。 

selectCells = ThisComponent.CurrentController.getSelection()

そこから、はじめと終わりのセルのアドレスを取得し、

引き算して、列数を得ます。

+1をしないとずれます。

 

 

 

sub ksCountRC

dim selectCells As Object
dim cCount as integer

selectCells = ThisComponent.CurrentController.getSelection()

With selectCells.RangeAddress
cCount = .EndColumn – .StartColumn +1
MsgBox “StartColumn: ” & .StartColumn & Chr(10) & _
“StartRow:” & .StartRow & Chr(10) & _
“EndColumn: ” & .EndColumn & Chr(10) & _
“EndRow: ” & .EndRow & chr(10) &_
“Columns:” & cCount
End With


end sub