Top > OOoBasic > Calc > selection

選択セル範囲 Edit

選択セル範囲にアクセスします。

選択セル範囲の取得 Edit

現在のコントローラから Selection プロパティーまたは getSelection メソッドを使用することで選択セル範囲のオブジェクトが取得できます。

 Sub get_selection()
 Dim oSelection As Object, oCellRangeAddress As Object
   oSelection = ThisComponent.CurrentController.Selection
   oCellRangeAddress = ThisComponent.createInstance( _
                  "com.sun.star.sheet.SheetCellRanges" )
   oCellRangeAddress.InsertByName( "", oSelection )
   MsgBox oCellRangeAddress.getRangeAddressesAsString()
 End Sub

上のコードでは,選択セル範囲が文字列として表示されます。 また, ThisComponent から CurrentSelection, getCurrentSelection で選択セル範囲を取得することもできます。

 oSelection = ThisComponent.getCurrentSelection

のようにすることで,選択セル範囲を取得できます。

使用しているメソッドは選択セル範囲の取得のみに使用するものではなく,選択中の全てのオブジェクトを取得します。そのため,選択状態によってはメニューバーのボタンやグラフのコントローラーやオブジェクトが取得されるときがあります。

選択セル範囲の設定 Edit

選択セル範囲を設定します。

Calc ドキュメントの CurrentControllerselect メソッドを使用することで選択セル範囲を設定できます。

 Sub set_selection1() 'in calc documents
 Dim oDoc As Object, oController As Object
 Dim oSelectedCellRange As Object
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   oSelectedCellRange = _
      oController.getActiveSheet().getCellRangeByName( "A4" ) 
   oController.select( oSelectedCellRange )
 End Sub

上のようにすることでセル範囲を選択した状態にできます。ここではアクティブシートの "A4" セルを選択状態にしています。アクティブシートの設定も同時に使用すればシートとセルの両方をえらんで選択状態にできます。

アクティブシートを設定しなくても,フォーカスはアクティブセルへ移ります。 ここで注意することは select メソッドがセル範囲専用ではなく全てのオブジェクトなどを選択状態にできるということです。

選択の解除 Edit

セルのカーソルを移動させるために、select メソッドを使えます。しかし、その後ではセルが選択状態になっているためすこし不都合があります。

選択状態の解除は次のように行えます。

下記のコードでは,セル "C1" にセルカーソルを select メソッドを使って移動させます。セルカーソルが移動したあとではセルが選択状態になっています。それをスロットコマンドを使って解除します。

Sub selection
Dim oDoc As Object, oController As Object
Dim oActiveSheet As Object, oCell As Object
Dim oFrame As Object

  oDoc = ThisComponent
  oController = oDoc.getCurrentController()
  oFrame = oController.getFrame()
  oActiveSheet = oController.getActiveSheet()
  oCell = oActiveSheet.getCellRangeByName("C1")
  
  oController.select(oCell)
  msgbox "unselect"
  aURL = CreateUnoStruct("com.sun.star.util.URL")
  aURL.Complete = ".uno:Deselect"
  CreateUnoService("com.sun.star.util.URLTransformer")._
    parseStrict(aURL)
  oDisp = oController.queryDispatch(aURL,"_self",0)
  oDisp.dispatch(aURL,Array()
End Sub

.uno:Deselect コマンドを利用して選択を解除します。コマンドについてはコマンド ページを参照してください。

キーワード: 選択解除

セルカーソルのあるセルを取得 Edit

シート上に見えているセルカーソルはいつもどこか一つのセルを指します。API のメソッドなどからは取得できませんが、次のようにして無理やり取得します。

Sub GetCellTest
 oDoc = ThisComponent
 oCell = GetCellViewCursor(oDoc)
 If NOT IsNull(oCell) Then
   msgbox oCell.AbsoluteName
 End If
End Sub


Function GetCellViewCursor(oDoc As Object) As Object
 Dim oCell As Object
 oController = oDoc.getCurrentController()
 
 oSheets = oDoc.getSheets()
 sViewData = oController.getViewData()
 
 aData = Split(sViewData, ";")
 If UBound(aData) >= 3 Then
   nSheetIndex = CInt(aData(1))
   If UBound(aData) >= (nSheetIndex + 3) Then
     aSheetData = Split(aData(nSheetIndex + 3), "/")
     If UBound(aSheetData) >= 10 Then
       oCell = oSheets.getCellByPosition(aSheetData(0), aSheetData(1), nSheetIndex)
     End If
   End If
 End If
 GetCellViewCursor = oCell
End Function

まとめ Edit

Methods
boolean select (
any )
オブジェクトを選択する
void getSelection ()選択中のオブジェクトのインターフェース(選択セル範囲も取得可能)

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