条件付書式設定 
条件付書式設定を使用します。
条件付書式の利用 
条件付書式設定はセル,セル範囲,シートオブジェクトで使用することができます。条件付書式設定はこれらのオブジェクトの ConditionalFormat プロパティーで設定することができます。
Sub conditionalformat_1
Dim oSheet As Object, oCelRange As Object
Dim oConditionalFormat As Object
oSheet = ThisComponent.Sheets( 0 )
oCellRange = oSheet.getCellRangeByPosition( 0, 0, 2, 3 )
oConditionalFormat = oCellRange.ConditionalFormat '--
End Sub
上記のコードで戻されるのは com.sun.star.sheet.XSheetConditionalEntries インターフェースです。
条件 
条件付書式設定は条件にしたがって判断した結果セルにスタイルを適用します。そこで使用される条件はいくつかのプロパティーを持っています。条件のエントリーのプロパティーは com.sun.star.beans.PropertyValue を使用して設定します。
条件エントリーのプロパティーは次のものです。
Properties |
Operator | 実行する演算。 .sheet.ConditionOperator で |
Formula1 | 評価する式の文字列 |
Formula2 | 評価する式の文字列 (条件によっては使用されない) |
SourcePosition | セルの相対参照時の基本アドレス。 .table.CellAddress struct で |
StyleName | 条件に一致したときに設定するセルスタイル |
Operator は次の .sheet.ConditionOperator enum で設定します。
Values of com.sun.star.sheet.ConditionOperator |
NONE | 条件なし |
EQUAL | 次の値に等しい |
NOT_EQUAL | 次の値に等しくない |
GREATER | 次の値より大きい |
GREATER_EQUAL | 次の値以上 |
LESS | 次の値より小さい |
LESS_EQUAL | 次の値以下 |
BETWEEN | 次の値の間 |
NOT_BETWEEN | 次の値の間でない |
FORMULA | 数式が |
Formula1 と Formula2 は文字列としての式を使用します。
SourcePosition は com.sun.star.table.CellAddress を使用して設定します。
StyleName は適用するセルスタイル名を文字列として設定します。
新しい条件を設定するには addNew メソッドを使用します。このメソッドは条件のプロパティー値を引数に取ります。
次の例ではセルの値が 100 より「次の値より大きい」条件で "NewCellStyle" のセルスタイルを適用する条件付書式設定をセルに適用します。
Sub conditionalformat_2
Dim oCell As Object
Dim oConditionalFormat As Object
Dim aCondition(2) As New com.sun.star.beans.PropertyValue
oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
oConditionalFormat = oCell.ConditionalFormat
aCondition(0).Name = "Operator"
aCondition(0).Value = com.sun.star.sheet.ConditionOperator.GREATER
aCondition(1).Name = "Formula1"
aCondition(1).Value = "100"
aCondition(2).Name = "StyleName"
aCondition(2).Value = "NewCellStyle"
oConditionalFormat.addNew( aCondition() ) '--
oCell.ConditionalFormat = oConditionalFormat
End Sub
条件の追加 
条件付書式設定では条件は 3 つ使用することができます。前期の例では一つしか条件と使用しませんでした。ここでは二つ以上の条件を使用してみます。
Sub conditionalformat_3
Dim oCell As Object
Dim oConditionalFormat As Object
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(3) As New com.sun.star.beans.PropertyValue
oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
oConditionalFormat = oCell.ConditionalFormat
aCondition1(0).Name = "Operator"
aCondition1(0).Value = com.sun.star.sheet.ConditionOperator.GREATER
aCondition1(1).Name = "Formula1"
aCondition1(1).Value = "100"
aCondition1(2).Name = "StyleName"
aCondition1(2).Value = "NewCellStyle"
aCondition2(0).Name = "Operator"
aCondition2(0).Value = com.sun.star.sheet.ConditionOperator.BETWEEN
aCondition2(1).Name = "Formula1"
aCondition2(1).Value = "50"
aCondition2(2).Name = "Formula2"
aCondition2(2).Value = "100"
aCondition2(3).Name = "StyleName"
aCondition2(3).Value = "Result"
oConditionalFormat.clear() '-- 1
oConditionalFormat.addNew( aCondition1() )
oConditionalFormat.addNew( aCondition2() )
oCell.ConditionalFormat = oConditionalFormat
End Sub
上記のコードでは二つの条件を設定しています。ここで, "1" 行目で clear() メソッドを使用しています。このメソッドは条件付書式設定の条件をすべて削除するためのメソッドです。前記「条件」でのコードの続きに "1" 行目なしで条件を設定しようとすると条件は前のものに続けて順に設定されます。そこで,一度前の条件をすべて削除しています。
上記のように,二つ以上の条件は順に addNew メソッドを使用して設定することで順に設定することができます。また,条件は clear メソッドですべて取り消すことができます。
条件の削除 
一つだけの特定の位置の条件を削除するには removeByIndex メソッドを使用します。
Sub conditionalformat_4
Dim oCell As Object
Dim oConditionalFormat As Object
oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
oConditionalFormat = oCell.ConditionalFormat
oConditionalFormat.removeByIndex( 0 ) '--
oCell.ConditionalFormat = oConditionalFormat
End Sub
条件のインデックスは "0" から始まるので一つ目の条件のインデックスは "0" です。また,複数個ある条件のインデックスが小さい条件を削除した際は,インデックスがあとの条件のインデックスが変更されて条件の順番が詰められます。
すべての条件を削除するには前出の clear() メソッドを使用します。
Sub conditionalformat_5
Dim oCell As Object
Dim oConditionalFormat As Object
oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
oConditionalFormat = oCell.ConditionalFormat
oConditionalFormat.clear() '--
oCell.ConditionalFormat = oConditionalFormat
End Sub
確認 
条件付書式設定が設定されているかどうかを調べるためには hasElements() メソッドを使用します。
その他 
設定されている条件数を取得するには Count プロパティーを使用します。また, getCount() メソッドでも同様に行なうことができます。
条件名を取得するには getElementNames メソッドを使用します。これで取得される条件名は "Entry0", "Entry1", "Entry2" です。この条件が設定されているかどうかは hasByName メソッドを使用して取得することができます。また,名前のエントリーを取得するには getByName メソッドを使用します。インデックスで取得するには getByIndex メソッドを使用します。
条件には enumeration を使用してアクセスすることができます。そのために createEnumeration を使用します。
まとめ 
使用したメソッドをまとめておきます。
Methods |
void addNew ( SbxARRAY) | 新しい条件を設定する |
void removeByIndex (&brSbxLONG ) | 指定した位置の条件を削除します |
void clear () | すべての条件を削除します |
boolean hasElements () | 条件が設定されているかどうか |
long getCount () | 条件数 |
void getByIndex (&brSbxLONG ) | インデックスの条件を取得します。 |
void getByName (&brSbxSTRING ) | 名前のエントリーを取得する |
SbxARRAY getElementNames () | 条件名を返す。"Entry0","Entry1","Entry2" |
boolean hasByName (&brSbxSTRING ) | 名前の条件があるかどうか。設定されているかどうか |
.container.XEnumerationAccess createEnumeration () | 条件の enumeration |