表計算ドキュメントの効率的な編集方法

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png


これまでの節では、表計算ドキュメントの基本構造について説明しましたが、この節では個々のセルやセル範囲への効率的なアクセスについて説明します。

セル範囲

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).
Personal tools