まず、セルを取得(アクセス)する方法です。
VBAだと下記のようになります。
'単一セルをセル名にて指定するにはこうなります。Dim oCell As Object
Cell = ThisComponent.Sheets("Sheet1").getCellRangeByName("C1")
'複数セルをセル名で指定するにはこうなります。
Dim oRange0 As Object
oRange0 = ThisComponent.Sheets(0).getCellRangeByName("A3:C5")
'セルレンジ(セル範囲)をインデックスにて選択する場合はこうなります。(0からの絶対値になります)
Dim oRange1 As Object
oRange1 = ThisComponent.Sheets(0).getCellRangeByPosition(0,2,2,4) 'A3:C5を選択
'↑で取得したセル範囲にアクセスするには下記のようにします。
MsgBox oRange1.getCellByPosition(0,0).getString 'A3のセル値を表示
MsgBox oRange1.getCellByPosition(1,0).getString 'B3のセル値を表示
MsgBox oRange1.getCellByPosition(2,0).getString 'C3のセル値を表示
MsgBox oRange1.getCellByPosition(0,1).getString 'A4のセル値を表示
MsgBox oRange1.getCellByPosition(1,1).getString 'B4のセル値を表示
MsgBox oRange1.getCellByPosition(2,1).getString 'C4のセル値を表示
MsgBox oRange1.getCellByPosition(0,2).getString 'A5のセル値を表示
MsgBox oRange1.getCellByPosition(1,2).getString 'B5のセル値を表示
MsgBox oRange1.getCellByPosition(2,2).getString 'C5のセル値を表示
参考:
取得した範囲内のセルにアクセスする - OpenOffice.org Basic
また、セル範囲の一行を配列として取得するには、ScCellRangeObjオブジェクトのgetDataArrayメソッドを使えばいいようです。
こんな感じです。
Dim Sheet As ObjectDim DataArray()
Dim RowDataArray()
Sheet = ThisComponent.Sheets(0)
DataArray() = Sheet.getCellRangeByPosition(0, 0, 1, 1).getDataArray()
RowDataArray() = DataArray(0)
' RowDataArray(0) = Sheet.getCellByPosition(0, 0).Value(1行1列目)
' RowDataArray(1) = Sheet.getCellByPosition(1, 0).Value(1行2列目)
RowDataArray() = DataArray(1)
' RowDataArray(0) = Sheet.getCellByPosition(0, 1).Value(2行1列目)
' RowDataArray(1) = Sheet.getCellByPosition(1, 1).Value(2行2列目)
参考:
ScCellRangeObj - OpenOffice.org リファレンス ScCellRangeObj.getDataArray メソッドの解説。
ちなみに、セルの値、文字列、数式を取得するには、下記のメソッドを使えます。
ScCellObj.getValue 値(DOUBLE型)を取得
ScCellObj.getString 表示文字列(String型)を取得
ScCellObj.getFormula 数式(String型)を取得
セルに値、文字列、数式をセットするには、setValue , setString , setFormula が使えます。
参考:
セルにデータを入力する - OpenOffice.org Basic
追記:------------------------------------
複数のセルを選択して、それらに一気に値を入れるには setDataArray メソッドを使います。((OpenOffice Basic)Calcでセルアクセスの高速化でもちょこっと書いてます)
例えば、A1:B3 の範囲で以下のような値を入れようとするには、以下のコードのようにします。
| A |
1|100|
2|101|
3|102|
Dim oSheet As Object'シート選択
oSheet = ThisComponent.Sheets(1)
'データを入れるための配列作成
Dim aryData(2)
Dim i As Integer
For i = 0 To Ubound( aryData )
aryData(i) = Array( 100 + i )
Next i
'セル範囲に配列化されたデータ挿入。
oSheet.getCellRangeByName("A1:A3").setDataArray(aryData)
例えば、A1:B3 の範囲で以下のような値を入れようとするには、以下のコードのようにします。
入れたい値:
| A | B |
1|100|200|
2|101|201|
3|102|202|
Dim oSheet As Object'シート選択
oSheet = ThisComponent.Sheets(1)
'データを入れるための配列作成
Dim aryData(2)
Dim i As Integer
For i = 0 To Ubound( aryData )
aryData(i) = Array( 100 + i , 200 + i)
Next i
'セル範囲に配列化されたデータ挿入。
oSheet.getCellRangeByName("A1:B3").setDataArray(aryData)
コードを見てわかるように、挿入するデータのは行単位と、列単位にそれぞれ配列(ジャグ配列つまり配列の配列)が必要になるということですね。
セル範囲の行列数と、配列の要素数が異なると、「BASICランタイムエラー 例外が発生しました。Type: com.sun,star.uno.RuntimeException Message:。」というエラーになります。
このあたりは注意が必要ですね。
また、セルの値や書式を削除するには、clearContents メソッドを使います。
引数に、クリアする内容をフラグで指定します。フラグに意味は以下のような感じ。
値 :フラグ :説明
1 :VALUE :日付や時刻として書式設定されていない数値
2 :DATETIME :日付や時刻として書式設定されている数値
4 :STRING :文字列
8 :ANNOTATION :セルに付けられたコメント
16 :FORMULA :計算式
32 :HARDATTR :セルに直接指定された書式
64 :STYLES :間接的に指定された書式
128:OBJECT :セルに配置された描画オブジェクト
256:EDITATTR :セル内の一部のテキストに対してのみ指定された書式
例えば、数値と文字列、計算式を削除するには以下のようにします。
Dim oCell As Object'シート選択
oSheet = ThisComponent.Sheets(1)
'数値と文字列、計算式削除
oSheet.getCellRangeByName("A1:B2").clearContents(1+2+4+16)
すべての内容をクリアするにはフラグの値を全て加算した 511 を指定します。
参考: