表計算ドキュメントの効率的な編集方法
これまでの節では、表計算ドキュメントの基本構造について説明しましたが、この節では個々のセルやセル範囲への効率的なアクセスについて説明します。
セル範囲
Apache OpenOffice には、個々のセルを示すオブジェクト (com.sun.star.table.Cell サービス) の他に、セル範囲を示すオブジェクトも用意されています。これは CellRange オブジェクトと呼ばれるもので、スプレッドシートオブジェクトから getCellRangeByName を呼び出して作成します。
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("A1:C15")
表計算ドキュメント上のセル範囲を指定するには、コロン記号 (:) を使用します。たとえば A1:C15 という指定は、列 A から 列 C の第 1 から第 15 行目のセル範囲を示します。
特定のセル範囲内にある個々のセル位置を指定するには、getCellByPosition メソッドを使用しますが、その際には左上隅のセルの座標は (0, 0) として扱われます。次のサンプルコードでは、このメソッドを利用して、C3 セルを示すオブジェクトを作成しています。
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("B2:D4")
Cell = CellRange.GetCellByPosition(1, 1)
セル範囲の書式設定
個々のセルの場合と同様、セル範囲に対しても com.sun.star.table.CellProperties サービスを用いて書式設定を行うことができます。このサービスの詳細情報およびサンプルコードについては「表計算ドキュメントの書式設定」の節を参照してください。
セル範囲を利用した計算
セル範囲に対しては、computeFunction メソッドを用いて各種の算術計算を実行できます。この computeFunction のパラメータには、実行する計算処理を示す定数を渡します。こうした定数は、com.sun.star.sheet.GeneralFunction に定められています。指定可能な定数値は次のものです。
- SUM
- すべての数値の合計
- COUNT
- すべてのデータ数 (数値以外のデータも含む)
- COUNTNUMS
- 数値データの数
- AVERAGE
- すべての数値の平均値
- MAX
- 数値の最大値
- MIN
- 数値の最小値
- PRODUCT
- すべての数値の積
- STDEV
- 標準偏差
- VAR
- 分散
- STDEVP
- 母集団全体の標準偏差
- VARP
- 母集団全体の分散
次のサンプルコードでは、セル範囲 A1:C3 の平均値を計算して、メッセージボックスに表示します。
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")
CellRange = Sheet.getCellRangeByName("A1:C3")
MsgBox CellRange.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)
セルの内容の削除
セルやセル範囲の内容を削除する場合、clearContents メソッドを利用すると、セル範囲中の特定のタイプの内容だけを消去することができます。
次のサンプルコードでは、セル範囲 B2:C3 から、すべての文字列および直接指定した書式設定情報を削除しています。
Dim Doc As Object
Dim Sheet As Object
Dim CellRange As Object
Dim Flags As Long
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRange = Sheet.getCellRangeByName("B2:C3")
Flags = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.HARDATTR
CellRange.clearContents(Flags)
clearContents のフラグは、com.sun.star.sheet.CellFlags の定数のリストにより指定します。このような定数値としては、次の値を使用できます。
- VALUE
- 日付や時刻として書式設定されていない数値
- DATETIME
- 日付や時刻として書式設定されている数値
- STRING
- 文字列
- ANNOTATION
- セルに付けられたコメント
- FORMULA
- 数式
- HARDATTR
- セルに直接指定した書式
- STYLES
- 間接的に設定した書式
- OBJECTS
- セルに配置された図形描画オブジェクト
- EDITATTR
- セル中の一部のテキストに対してのみ施された書式
clearContents による処理では、これらの定数を加算することにより同時指定することが可能で、該当する種類のデータをまとめて削除することもできます。
セルの内容の検索と置換
文書ドキュメントと同様に、表計算ドキュメントにも検索と置換の機能が用意されています。
表計算ドキュメントの場合、検索と置換のオプション指定用オブジェクトは、ドキュメントオブジェクトから直接作成するのではなく、Sheets のリストを使用する必要があります。次のサンプルコードは、検索と置換の実行例です。
Dim Doc As Object
Dim Sheet As Object
Dim ReplaceDescriptor As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
ReplaceDescriptor = Sheet.createReplaceDescriptor()
ReplaceDescriptor.SearchString = "is"
ReplaceDescriptor.ReplaceString = "was"
For I = 0 to Doc.Sheets.Count - 1
Sheet = Doc.Sheets(I)
Sheet.ReplaceAll(ReplaceDescriptor)
Next I
このサンプルコードでは、最初のシートに対して ReplaceDescriptor を作成してからループに入り、すべてのシートを対象とした検索と置換の処理を行なっています。
| Content on this page is licensed under the Public Documentation License (PDL). |