Top > OOoBasic > Calc > numberformats

セルの数書式設定 Edit

セルまたはセル範囲の数書式設定を行う方法です。

セルと数書式 Edit

セルのプロパティーのうち数書式に関するものは NumberFormat です。数書式はそれぞれの数書式ごとにキー番号がつけられて管理されています。そのキーを設定することで数書式が設定できます。

セル範囲では,数書式設定がそのセル範囲に含まれるセル全てで同じでなければ,NumberFormat プロパティーは Standard の書式キーを返します。また,設定時には全てのセルが同じ数書式になります。キーは Long 型の値です。

Sub cell_numberformat()
Dim oDocument As Object, oCellRange as Object
  oDocument = ThisComponent
  oCellRange = oDocument.Sheets(0).getCellRangeByName( "A1:B1" )
  MsgBox oCellRange.NumberFormat
End Sub

このようにすれば,セル範囲の数書式設定のキーが取得できます。 新しい数書式を追加したり,合った数書式を探すにはドキュメントのプロパティーである NumberFormats プロパティーからサービスへアクセスする必要があります。次のようにオブジェクトにしてアクセスするとよいでしょう。

Dim oDocument As Object, oNumberFormats As Object
  oDocument = ThisComponent
  oNumberFormats = oDocument.NumberFormats

言語 Edit

数書式設定は言語によって違う部分があります。そこで,使用したい言語を選ぶ必要があります。まず,メソッドなどでの言語設定を取り上げます。

言語は,com.sun.star.lang.Locale struct を用いて設定します。次のコードは,日本の言語設定のものです。

Dim oLocale As New com.sun.star.lang.Locale
  oLocale.Language = "ja"
  oLocale.Country = "JP"

メソッドの引数に Locale を指定するときはこのようにしてつくっておいた oLocale のような struct を使用します。また, com.sun.star.lang.Locale struct を作成しても空の状態で Language を指定しなければ標準の言語として扱われます。

書式コードでキーを探す Edit

使用したい数書式コードを持った書式のキーを探すには,queryKey () メソッドを使用します。

Sub numberformats_querykey()
Dim oNumberFormats As Object
Dim oLocale As New com.sun.star.lang.Locale
  oLocale.Language = "ja"
  oLocale.Country = "JP"
  oNumberFormats = ThisComponent.NumberFormats
  MsgBox oNumberFormats.queryKey( "####.00", _
  oLocale, False )
End Sub

"####.00" の書式コードを持った数書式のキーを調べています。この queryKey () は一致する書式コードを持った数書式がなければ "-1" を戻します。 メソッドの 2 つ目の引数には調べる言語を指定しています。また, 3 つ目の引数にはその書式コードが属する分類がない場合に分類を作成するかどうかを指定します。普段は, False を指定します。

調べた書式コードに対応する数書式があれば,その数書式のキーが戻されるのでそのキーをオブジェクトの NumberFormat プロパティーに設定してやることでセルなどの数書式が設定できます。

Sub numberformats_querykey2()
Dim oDocument As Object, oNumberFormats As Object
Dim oSheet As Object, oCell As Object
Dim oLocale As New com.sun.star.lang.Locale
Dim nKey As Long
  oDocument = ThisComponent
  oNumberFormats = oDocument.NumberFormats
  nKey = oNumberFormats.queryKey( "#,##0", oLocale, False )
  oSheet = oDocument.CurrentController.ActiveSheet
  oCell = oSheet.getCellByPosition( 1, 1 ) ' B2
  oCell.Value = 1234.5678
  If nKey <> -1 Then
    oCell.NumberFormat = nKey
  End If
End Sub

この場合は, "B2" セルに数値 "1234.5678" を入力して "#,##0" の書式コードを持つ書式のキーを調べてからある場合だけセルに数書式を設定しています。この書式コードがあれば,セルには "1,235" と表示されます。 上の例では,使用したい数書式がなければ設定されません。そこで,新しい書式の追加が必要です。

書式コードを追加する Edit

新しい数書式を追加するには,addNew () メソッドを使用します。

Sub numberformats_addnewformat()
Dim oDocument As Object, oNumberFormats As Object
Dim oSheet As Object, oCell As Object
Dim oLocale As New com.sun.star.lang.Locale
Dim nKey As Long
Dim sFormat As String
  sFormat = "[BLUE]#,##0.00;[RED]-#,##0.00"
  oDocument = ThisComponent
  oSheet = oDocument.CurrentController.ActiveSheet
  oCell = oSheet.getCellByPosition( 1, 2 ) '
  oCell.Value = -135045.2
  oNumberFormats = oDocument.NumberFormats

  nKey = oNumberFormats.queryKey( sFormat, oLocale, False )
  If nKey <> -1 Then
    oCell.NumberFormat = nKey
  Else
    nKey = oNumberFormats.addNew( sFormat, oLocale )
    oCell.NumberFormat = nKey
  End If
End Sub

使用したい書式コード "[BLUE]#,##0.00;[RED]-#,##0.00" がないので,addNew () メソッドで新しく追加しています。この addNew () メソッドは追加した書式コードのキーを戻します。

追加したキーはいらなくなったら removeByKey () メソッドで削除します。引数に削除したいキーを指定します。

oNumberFormats.removeByKey( nKey )

書式コードを作成する Edit

あるコードをもとにして小数点以下の桁数などを変更した書式コードをつくるには,generateFormat () メソッドを使用します。このメソッドは次のように引数を指定します。

 Sub numberformats_generateformat()
 Dim oDocument As Object, oNumberFormats As Object
 Dim oLocale As New com.sun.star.lang.Locale
 Dim nBaseKey As Long
 Dim sFormat As String
   oDocument = ThisComponent
   oNumberFormats = oDocument.NumberFormats
   nBaseKey = oNumberFormats.queryKey( "#,##0", oLocale, False )
   If nBaseKey <> -1 Then
     sFormat = oNumberFormats.generateFormat( nBaseKey, oLocale, _
                     False, True, 1, 0 )
     MsgBox sFormat
   End If
 End Sub

コードを実行すると, "#.0;[RED]-#.0" が表示されます。この generateFormat () メソッドでは書式コードが追加されるわけではないので,生成した書式コードを使用するには addNew () で追加する必要があります。

書式コードを取得する Edit

あるキーの書式コードがどのような設定になっているかを調べるときなどには,getByKey () メソッドを使用します。次のようにして調べてみます。

Sub numberformats_getbykey()
Dim oDocument As Object, oNumberFormats As Object, oFormat As Object
  oDocument = ThisComponent
  oNumberFormats = oDocument.NumberFormats
  oFormat = oNumberFormats.getByKey( 5000 )
  MsgBox oFormat.Dbg_Properties
End Sub

得られたプロパティーをそれぞれの書式コードが持っています。プロパティーとして取得可能です。しかし,ほとんど読み込み専用のプロパティーです。


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