Top > OOoBasic > Calc > cell

セル Edit

Calc ドキュメントのセルにアクセスします。

セルオブジェクト Edit

単一のセルオブジェクトを取得するために getCellByPosition メソッドを利用します。引数には列、行の順に取得するセルのインデックスを指定します。インデックスは "0" から始まります。

com.sun.star.table.XCell getCellByPosition ( [in] long nColumn, [in] long nRow )

Sub cell_by_position()
  Dim oCell As Object, oSheet As Object
  oSheet = ThisComponent.Sheets(0)
  oCell = oSheet.getCellByPosition( 3, 5 ) ' cell "D6"
  MsgBox oCell.String
End Sub

上記のコードを実行すると "D6" のセルに表示された文字列が MsgBox に表示されます。列、行の順にポジションを指定することでセルのオブジェクトが得られます。

セル範囲オブジェクト Edit

セル範囲オブジェクトはインデックスまたは範囲名を指定して取得できます。

インデックスによる取得 Edit

セル範囲のインデックスを指定してセル範囲オブジェクトを取得します。 getCellRangeByPosition は取得するセル範囲の左,上,右,下の順にセルの場所を指定します。

com.sun.star.table.XCellRange getCellRangeByPosition ( [in] long nLeft, [in] long nTop, [in] long nRight, [in] long nBottom )

Sub cellrange_by_position()
  Dim oCellRange As Object, oSheet As Object, oCellRangeAddress As Object
  oSheet = ThisComponent.Sheets(0)
  oCellRange = oSheet.getCellRangeByPosition( 2, 3, 5, 4 ) 'range "C4:F5"
  oCellRangeAddress = ThisComponent.createInstance( _
                 "com.sun.star.sheet.SheetCellRanges" )
  oCellRangeAddress.InsertByName( "", oCellRange )
  MsgBox oCellRangeAddress.getRangeAddressesAsString()
End Sub

左は右より、上は下よりポジションが小さくなければエラーとなります。

名前による取得 Edit

範囲名を指定してセル範囲オブジェクトを取得できます。 getCellRangeByName は取得するセルまたはセル範囲を名前で指定します。

com.sun.star.table.XCellRange getCellRangeByName ( [in] string aRange )

getCellRangeByName ではセル範囲の名前を指定します。"A1" や "C4:F5" または,メニュー -> 挿入 -> 名前 でセルまたはセル範囲につけた名前を指定できます。

 Sub cellrange_by_name()
 Dim oCellRange As Object, oSheet As Object
   oSheet = ThisComponent.Sheets(0)
   oCellRange = oSheet.getCellRangeByName( "B2" )
   oCellRange.setString( "cell B2" )
   
   oCellRange = oSheet.getCellRangeByName( "D2:E6" )
   oCellRange.setPropertyValue( "CellBackColor", RGB( 255, 255, 0 ) )
 End Sub

上のコードを実行すると "B2" セルに「cell B2」と表示され,"D2:E5" のセル範囲の背景色が黄色になったはずです。

getCellRangeByName はセル範囲でも使用できますが,それでもセル範囲の名前はシートに絶対的になっていて,セル範囲の外のセル範囲名を引数にとるとエラーになります。

サブセル範囲 Edit

特定のセル範囲内にあるサブセルやサブセル範囲にアクセスするために上記のメソッドを利用します。

サブセルは親セル範囲に対して相対インデックスになります。

Sub cell_10
  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oCellRange = oSheet.getCellByName("B2:D5")
  
  oSubCell = oCellRange.getCellByPosition(0,0)
  oSubRange = oCellRange.getCellRangeByPosition(1,1,2,2)
End Sub

oSubCell はセル B2 に、oSubRange は C3:D4 範囲に対応します。

イテレーション Edit

セル範囲にあるすべてのセルを順に処理するときには大抵、次のようにします。

Sub cell_11
  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oCellRange = oSheet.getCellRangeByPosition(0,0,3,5)
  aRangeAddress = oCellRange.getRangeAddress()
  
  nCols = aRangeAddress.EndColumn - aRangeAddress.StartColumn
  nRows = aRangeAddress.EndRow - aRangeAddress.StartRow
  
  For i = 0 To nRows Step 1
    For j = 0 To nCols Step 1
      msgbox oCellRange.getCellByPosition(j,i).String
    Next
  Next
End Sub

セル範囲の列数および行数はセルのアドレスで取得します。

まとめ Edit

Methods
com.sun.star.table.XCell getCellByPosition (
[in] long nColumn‚
[in] long nRow )
範囲の中のインデックスで一つのセルオブジェクトを返す(列,行の順)
com.sun.star.table.XCellRange getCellRangeByPosition (
[in] long nLeft‚
[in] long nTop‚
[in] long nRight‚
[in] long nBottom )
範囲の中のインデックスでセル範囲のオブジェクトを返す(左,上,右,下の順)
com.sun.star.table.XCellRange getCellRangeByName (
[in] string aRange )
セルの名前からsub-rangeを返す。"A1:D8"や"C4"など

XCellRangesAccess Edit

シートコンテナオブジェクトにサポートされている com.sun.star.sheet.XCellRangesAccess インターフェースではシートも指定することでセルオブジェクトやセル範囲オブジェクトにアクセスできます。

com.sun.star.table.XCell
getCellByPosition( [in] long nColumn,
                     [in] long nRow,
                     [in] long nSheet )
             raises( com.sun.star.lang.IndexOutOfBoundsException )
declared in: com.sun.star.sheet.XCellRangesAccess

セルオブジェクトを返します。

com.sun.star.table.XCellRange
getCellRangeByPosition( [in] long nLeft,
                          [in] long nTop,
                          [in] long nRight,
                          [in] long nBottom,
                          [in] long nSheet )
                  raises( com.sun.star.sheet.XCellRangesAccess )
declared in: com.sun.star.lang.IndexOutOfBoundsException

セル範囲オブジェクトを返します。

[]com.sun.star.table.XCellRange
getCellRangesByName( [in] string aRange )
               raises( com.sun.star.sheet.XCellRangesAccess  )
declared in: com.sun.star.lang.IllegalArgumentException

複数のセル範囲を返します。


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