StarSuite 8 Basic プログラミングガイド
  Cerca solo questo libro
Scarica il manuale in formato PDF (1383 KB)

第 7 章 表計算ドキュメント

StarSuite Basic には、プログラム制御により表計算ドキュメントの作成および編集を行えるよう、各種のインターフェースが用意されています。 本章では、表計算ドキュメントの操作に必要なサービス、メソッド、属性について説明します。

最初の節では、表計算ドキュメントの基本的な構造について触れ、個々のセルへのアクセスおよび編集方法を説明します。

次の節では、表計算ドキュメントのより効率的な編集方法を検討し、セル範囲という概念や、セルの内容の検索と置換を行うためのオプションを説明します。


注 –

Range オブジェクトを利用すると、様々なセル範囲にアクセスすることができますが、これらは新規 API の導入に伴って拡張された機能です。


表計算ドキュメント (スプレッドシート) の構造

表計算ドキュメントのドキュメントオブジェクトは、com.sun.star.sheet.SpreadsheetDocument サービスをベースにしています。 通常これらのドキュメントには、複数の表 (スプレッドシート) があります。 このマニュアルで使う用語として、表計算ドキュメント は 1 つのドキュメント全体を意味するものとし、スプレッドシート (略称: シート) は各ドキュメントを構成する個々の表 (テーブル) を意味するものとします。


注 –

VBA と StarSuite Basic では、表計算ドキュメント関係の用語に違いがあります。 VBA のドキュメントオブジェクトは Workbook、個々のページは Worksheets と呼ばれますが、StarSuite Basic の場合は SpreadsheetDocument および Sheet と呼ばれています。


スプレッドシート

表計算ドキュメントの各シートにアクセスするには、Sheets リストを使用します。

以下の 2 つのサンプルコードでは、それぞれ番号および名前を使って各シートへアクセスする方法を示します。

例 1: 番号によるアクセス (開始値は 0)

Dim Doc As Object
Dim Sheet As Object

Doc = StarDesktop.CurrentComponent
Sheet  = Doc. Sheets (0)

例 2: 名前によるアクセス

Dim Doc As Object
Dim Sheet As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.getByName("Sheet 1")

最初のサンプルコードでは、シートへのアクセスを番号指定で行なっています (開始値は 0)。 次のサンプルコードでは、getByName メソッドにシート名を指定してアクセスしています。

getByName メソッドで取得される Sheet というオブジェクトは、com.sun.star.sheet.Spreadsheet サービスをサポートしています。 このサービスは、シート編集用の各種インターフェースを提供するもので、以下の属性を利用できます。

  • IsVisible (ブール値) – スプレッドシートの表示状態を指定します。

  • PageStyle (文字列) – スプレッドシートのページテンプレート名を指定します。

シートの作成、削除、名前の変更

表計算ドキュメント (spreadsheet) の Sheets リストは、個々のシートの作成、削除、名前の変更にも使用します。 以下のサンプルコードでは、hasByName メソッドを用いて MySheet という名前のシートが存在するかをチェックします。 そうした名前のシートが存在する場合、getByName メソッドを用いて該当オブジェクトへの参照を取得して、Sheet という変数に収めます。 該当するシートが存在しない場合は、createInstance メソッドを用いてこれを新規作成して、createInstance メソッドにより表計算ドキュメントに挿入します。

Dim Doc As Object
Dim Sheet As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

If Doc.Sheets.hasByName("MySheet") Then
   Sheet = Doc.Sheets.getByName("MySheet")
Else
   Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
   Doc.Sheets.insertByName("MySheet", Sheet)
End If

第 4 章「StarSuite API について」で説明したように、getByName および insertByName メソッドは com.sun.star.container.XnameContainer インターフェースから提供されています。

表の行と列

個々のシートは、複数の行と列から構成されています。 これらは com.sun.star.table.TableColumns または com.sun.star.table.TableRows サービスをサポートしており、アクセスする際には表計算オブジェクトの Rows および Columns 属性を使用します。

以下のサンプルコードでは、FirstCol および FirstRow という 2 つのオブジェクト変数を作成して、それぞれに第 1 列および第 1 行の参照情報を格納させています。

Dim Doc As Object
Dim Sheet As Object
Dim FirstRow As Object
Dim FirstCol As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

FirstCol = Sheet.Columns(0)
FirstRow = Sheet.Rows(0)

列オブジェクトは com.sun.star.table.TableColumn サービスをサポートしており、以下の属性を利用できます。

  • Width (ロング整数) – 100 分の 1 ミリ単位で指定した列幅。

  • OptimalWidth (ブール値) – 列の幅を最適化する指定。

  • IsVisible (ブール値) – 列の表示状態の指定。

  • IsStartOfNewPage (ブール値) – 印刷時に該当列の前で改ページをする指定。

列の幅は、OptimalWidth 属性に True を指定した場合のみ、自動的に最適化されます。 個々のセル幅が変更されても、そのセルを含む列の幅は変更されません。 実際の機能面から見た場合、OptimalWidth は属性ではなくメソッドとして分類されるべきものです。

行オブジェクトは com.sun.star.table.RowColumn サービスをベースとしており、以下の属性を利用できます。

  • Height (ロング整数) - 100 分の 1 ミリ単位で指定した行の高さ。

  • OptimalHeight (ブール値) - 行の高さを最適化する指定。

  • IsVisible (ブール値) - 行の表示状態の指定。

  • IsStartOfNewPage (ブール値) - 印刷時に該当行の前で改ページをする指定。

OptimalHeight 属性に True を指定した場合、その行に属するセルの高さが変更された際に、行全体の高さが自動的に最適化されます。 こうした自動最適化は、Height 属性で行の高さを指定すると解除されます。

以下のサンプルコードでは、シート内の最初の 5 行に対して高さの自動最適化を設定し、第 2 列を非表示にします。

Dim Doc As Object
Dim Sheet As Object
Dim Row As Object
Dim Col As Object
Dim I As Integer

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

For I = 0 To 4
   Row = Sheet.Rows(I)
   Row.OptimalHeight = True
Next I

Col = Sheet.Columns(1)
Col.IsVisible = False

注 –

StarSuite Basic では、Rows および Columns のリストに対して、インデックス指定によるアクセスが行えます。 ただし VBA の場合とは異なり、列のインデックスの開始値は 1 ではなく 0 となります。


列および行の挿入と削除

各シート中の列や行へのアクセスおよび、これらの挿入と削除には、Rows および Columns オブジェクトを使用します。

Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.insertByIndex(3, 1)
Sheet.Columns.removeByIndex(5, 1)

このサンプルコードでは、insertByIndex メソッドを用いて、シート上の第 4 列に新規列を挿入しています (開始値が 0 なのでインデックス値は 3) 挿入時の第 2 パラメータには、挿入する列数を指定します (この場合は 1)。

次に removeByIndex メソッドを用いて、第 6 列を削除しています (インデックス値は 5)。 この場合の第 2 パラメータには、削除する列数を指定します。

こうした列の処理法は、行に対する挿入や削除の場合も同様で、Columns オブジェクトの代わりに Rows オブジェクトを使用するだけです。

セル

個々のスプレッドシートを構成するのがセルという単位で、これらは 2 次元のリストで管理されます。 つまり各セルは、左上隅を原点 (0,0) とする X と Y 座標で指定できます。

以下のサンプルコードは、左上隅のセルにアクセスして、文字列を挿入します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.String = "Test"

セルの参照は、こうした数字による座標指定だけではなく、名前による指定も可能で、たとえばスプレッドシートの左上隅のセル (0,0) は、A1 セルとも呼ばれます。 この場合のアルファベット A は列の位置を示し、数値 1 は行の位置を示します。 このようなセル位置の参照方式を使い分ける際には、名前 (name) 方式の行指定は 1 から始まり、位置 (position) 方式の値は 0 から始まるので、両者を混同しないよう注意が必要です。

StarSuite のセルには、テキスト、数値、数式のいずれかを入力でき、何も入力されていないものを空白セルと呼びます。 セルの種類は、セルに入力する内容で規定されるのではなく、これらを入力する際に使用するオブジェクト属性により決まります。 つまり数値を入力するには Value 属性、テキストを入力するには String 属性、数式を入力するには Formula 属性をそれぞれ使用します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100

Cell = Sheet.getCellByPosition(0, 1)
Cell.String = "Test"

Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1"

このサンプルコードでは、A1 から A3 のセルに、それぞれ数値、テキスト、数式を入力しています。


注 –

ValueStringFormula 属性は、セルの値を指定する PutCell メソッドに取って代わる存在となっています。


仮に String 属性を用いて数値を入力した場合、StarSuite はこれをテキストとして扱います。 たとえば、このような方法でセルに入力された数値は、右揃えではなく左揃えに表示されます。 また数式を用いてテキストや数値を表示させた場合にも、同様の注意が必要です。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100

Cell = Sheet.getCellByPosition(0, 1)
Cell.String = 1000

Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1+A2"

MsgBox Cell.Value 

このサンプルコードを実行すると、A1 セルには 100、A2 セルには 1000 と表示されますが、A1+A2 という計算式の結果は 100 となります。 こうなる原因は、A2 セルの値を数値ではなくテキストとして入力したためです。

セルの内容が数値であるか文字列であるかを確認するには、Type 属性を使用します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 1000

Select Case Cell.Type 
Case com.sun.star.table.CellContentType.EMPTY 
   MsgBox "Content: Empty"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Content: Value"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Content: Text"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Content: Formula"
End Select

Cell.Type 属性を使うと、セルの内容の種類を示す com.sun.star.table.CellContentType の値を取得できます。 返される値は、以下のいずれかです。

  • EMPTY - 空白

  • VALUE - 数値

  • TEXT - 文字列

  • FORMULA - 数式

セルの挿入、削除、コピー、移動

StarSuite Calc には、セルの内容を直接編集する以外にも、セルの挿入、削除、コピー、移動を行うためのインターフェースが用意されています。 このインターフェース (com.sun.star.sheet.XRangeMovement) は、スプレッドシートオブジェクトを通じて利用するもので、セルの内容を操作するために 4 種類のメソッドを提供しています。

insertCell メソッドは、セルをスプレッドシートに挿入する際に使用します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

このサンプルコードは、表計算ドキュメントの最初のシート (インデックス値 0) の第 2 列と第 2 行の位置 (インデックス値はともに 1) に、2 行 2 列分のセル範囲を挿入します。 また挿入位置にある既存のセルは、その内容ごと下方に移動しています。

挿入するセル範囲を指定するには、com.sun.star.table.CellRangeAddress 構造体を使用します。 この構造体には、以下の値を設定できます。

  • Sheet (整数) - シート番号 (開始値は 0)。

  • StartColumn (ロング整数) – セル範囲の先頭列 (開始値は 0)。

  • StartRow (ロング整数) – セル範囲の先頭行 (開始値は 0)。

  • EndColumn (ロング整数) – セル範囲の末尾列 (開始値は 0)。

  • EndRow (ロング整数) – セル範囲の末尾行 (開始値は 0)。

これらの設定の終了した CellRangeAddress 構造体は、insertCells メソッドの第 1 パラメータとして渡します。 insertCells メソッドの第 2 パラメータには、セル範囲の挿入位置にある既存セルの処置を指定するため、com.sun.star.sheet.CellInsertMode の値を渡します。 この CellInsertMode には、以下の値が用意されています。

  • NONE – 挿入前の値を、その位置にとどめます。

  • DOWN – 挿入位置にあるセルを、下に移動します。

  • RIGHT – 挿入位置にあるセルを、右に移動します。

  • ROWS – 挿入位置にある行全体を、下に移動します。

  • COLUMNS – 挿入位置にある列全体を、右に移動します。

removeRange メソッドは、insertCells メソッドと逆の機能を担っています。 このメソッドは、CellRangeAddress 構造体で指定したセル範囲を、スプレッドシートから削除します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

このサンプルコードでは、B2:C3 のセル範囲をシートから削除して、該当範囲の下方にあるセルを上に 2 行分移動させています。 削除に伴い周囲のセルをどう処理するかは、以下の com.sun.star.sheet.CellDeleteMode の値により指定します。

  • NONE – 削除前の値を、その位置にとどめます。

  • UP – 該当範囲の下側にあるセルを上に移動します。

  • LEFT – 該当範囲の右側にあるセルを左に移動します。

  • ROWS – 該当範囲の下側にある行全体を、上に移動します。

  • COLUMNS – 該当範囲の右側にある列全体を、左に移動します。

XRangeMovement インターフェースには、セル範囲の移動 (moveRange) およびコピー (copyRange) 処理用に、2 つの追加メソッドが用意されています。 以下のサンプルコードでは、B2:C3 のセル範囲を、A6 の位置へ移動します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5

Sheet.moveRange(CellAddress, CellRangeAddress)

moveRange メソッドを使用する場合は、CellRangeAdress 構造体の指定以外にも、com.sun.star.table.CellAddress 構造体によるセル範囲の移動先も指定する必要があります。 CellAddress には、以下の値を設定できます。

  • Sheet (整数) – スプレッドシート番号 (開始値は 0)。

  • Column (ロング整数) – 移動先の列位置 (開始値は 0)。

  • Row (ロング整数) – 移動先の行位置 (開始値は 0)。

moveRange メソッドを使用した場合、移動先のセルの内容は常に上書きされます。 InsertCells メソッドの場合とは異なり、removeRange メソッドには、移動先のセルを自動的に移動させるパラメータは用意されていません。

copyRange メソッドの使用法は moveRange メソッドと同様ですが、copyRange の場合はセル範囲の移動ではなくコピーを行うという相違点があります。


注 –

機能面から見た場合、StarSuite Basic の insertCellremoveRangecopyRange の各メソッドは、VBA の Range.InsertRange.DeleteRange.Copy メソッドにそれぞれ相当します。 ただし、これらの VBA のメソッドは該当する Range オブジェクトを対象とするのに対して、StarSuite Basic のメソッドは Sheet オブジェクトを対象とします。


書式設定

表計算ドキュメントには、セルおよびページ単位での書式設定を行うための属性とメソッドが用意されています。

セル属性

セルの書式設定としては、表示フォントの種類やサイズなど、各種の項目が存在します。 個々のセルは com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties サービスをサポートしていますが、これらが使用する主要な属性については第 6 章「文書ドキュメント」で説明しています。 また特殊なセル書式については、com.sun.star.table.CellProperties サービスで処理します。 このサービスで使用する主要な属性については、以下の節で説明します。

これらの属性は、個々のセルおよびセル範囲に対して指定できます。


注 –

StarSuite API の CellProperties オブジェクトは、VBA の Interior オブジェクトに相当しますが、これはセル固有の属性の指定にも使用します。


背景色および影

com.sun.star.table.CellProperties サービスには、背景色および影の表示指定用に、以下の属性が用意されています。

  • CellBackColor (ロング整数) – セルの背景色を指定します。

  • IsCellBackgroundTransparent (ブール値) – 背景色を透明にするよう指定します。

  • ShadowFormat (構造体) – セルに付ける影を指定します (com.sun.star.table.ShadowFormat に定められた構造体)。

com.sun.star.table.ShadowFormat 構造体とセルの影指定は、以下のような関係になっています。

  • Location (列挙型) – 影の位置 (com.sun.star.table.ShadowLocation 構造体の値)。

  • ShadowWidth (整数) – 100 分の 1 ミリ単位で指定した影の幅。

  • IsTransparent (ブール値) – 影を透明にする指定。

  • Color (ロング整数) – 影の色。

以下のサンプルコードでは、B2 セルへの数値 1000 の入力、CellBackColor 属性による背景色の赤への変更、左下側 1 mm の位置への明るい灰色の影の表示を行います。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim ShadowFormat As New com.sun.star.table.ShadowFormat

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 1000

Cell.CellBackColor = RGB(255, 0, 0)

ShadowFormat.Location = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT
ShadowFormat.ShadowWidth = 100
ShadowFormat.Color = RGB(160, 160, 160)

Cell.ShadowFormat = ShadowFormat

テキストの配置

StarSuite には、セルのテキスト配置を指定する各種の機能が用意されています。

以下の属性は、テキストの水平および垂直方向の配置を指定するものです。

  • HoriJustify (列挙型) – テキストの水平方向の配置指定 (com.sun.star.table.CellHoriJustify に定められた値)。

  • VertJustify (列挙型) - テキストの垂直方向の配置指定 (com.sun.star.table.CellVertJustify に定められた値)。

  • Orientation (列挙型) – テキストの表示方向の指定 (com.sun.star.table.CellOrientation に定められた値)。

  • IsTextWrapped (ブール値) – セル内でテキストを自動改行させるかの指定。

  • RotateAngle (ロング整数) – 100 分の 1 度単位で指定したテキストの回転角。

以下のサンプルコードでは、左上隅にあるセルの表示を「縦書き」 (stack) にして、文字を 1 文字ずつ上下方向に並べて表示します。 なお、文字の回転は指定していません。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 1000

Cell.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT
Cell.VertJustify = com.sun.star.table.CellVertJustify.TOP
Cell.Orientation = com.sun.star.table.CellOrientation.STACKED

数値、日付、テキストの表示書式

StarSuite には、日付および時刻に対する各種の表示書式が用意されています。 これらの表示書式にはそれぞれ固有の内部番号が割り当てられており、NumberFormat 属性による書式指定もこの番号を使用します。 StarSuite では、queryKey および addNew メソッドを利用して、既存の数の書式だけでなく、数の書式をユーザー定義することもできます。 これらのメソッドには、以下のようなオブジェクト呼び出しでアクセスします。

NumberFormats = Doc.NumberFormats

書式の指定は、StarSuite Basic の Format 関数とよく似た形式のフォーマット用文字列を使用します。 ただし両者の間には大きな違いがあり、Format 関数のフォーマット用文字列は英語式の小数点と千単位の桁区切り記号を使用しますが、NumberFormats オブジェクトのフォーマット用文字列には、各ロケール別の記号を使う必要があります。

以下のサンプルコードでは、B2 セルに対して、小数部を 3 桁表示とし、コンマを千単位の桁区切りの記号とする数の書式を指定しています。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim NumberFormats As Object
Dim NumberFormatString As String
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 23400.3523565

LocalSettings.Language = "en"
LocalSettings.Country = "us"

NumberFormats = Doc.NumberFormats
NumberFormatString = "#,##0.000"

NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
If NumberFormatId = -1 Then
   NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
End If

MsgBox NumberFormatId
Cell.NumberFormat = NumberFormatId

セルの書式設定用オプションについては、StarSuite Calc 上の通常の操作で書式設定を行う際に用いる、セルの書式設定 のダイアログも参照してください。

ページ属性

ページ属性では、ドキュメントの各ページの表示内容に対する書式設定および、全ページに共通して配置する項目の設定などを行います。 具体的には、以下のようなオプションを指定します。

  • 用紙サイズ

  • ページ余白

  • ヘッダとフッタ

ページ書式は、他の書式指定と設定法が異なります。 セル、段落、テキストの書式は直接指定できますが、ページ書式はページスタイルを用いた間接的な設定も行えます。 たとえば、ヘッダやフッタは、ページスタイルとして登録できます。

以降の節では、表計算ドキュメントの主要なページ書式設定オプションについて説明します。 ここで説明するページスタイルの多くは、文書ドキュメントと共通するものです。 こうした共通で使用されるページ属性は、com.sun.star.style.PageProperties サービスで定義されています。 これに対して、表計算ドキュメント固有のページ属性は、com.sun.star.sheet.TablePageStyle サービスで定義されています。


注 –

Microsoft Office ドキュメントのページ属性 (ページ余白、枠線など) は、 Worksheet オブジェクト (Excel) または Document オブジェクト (Word) レベルの PageSetup オブジェクトで指定します。 StarSuite の場合、このような属性の指定はページスタイルを用いて行い、その後これらのページスタイルを該当するドキュメントにリンクさせる形になります。


ページ背景

com.sun.star.style.PageProperties サービスには、ページ背景に関する以下の属性が用意されています。

  • BackColor (ロング整数) – 背景色。

  • BackGraphicURL (文字列) – 背景に表示させる画像の URL。

  • BackGraphicFilter (文字列) – 背景用の画像に対するフィルタ名。

  • BackGraphicLocation (列挙型) – 背景用の画像の位置 (列挙型で定められた値)。

  • BackTransparent (ブール値) - 背景を透明にする指定。

ページ書式

ページ書式の指定には、com.sun.star.style.PageProperties サービスを使用します。

  • IsLandscape (ブール値) – 用紙方向を横にする指定。

  • Width (ロング整数) – 100 分の 1 ミリ単位で指定したページの幅。

  • Height (ロング整数) – 100 分の 1 ミリ単位で指定したページの高さ。

  • PrinterPaperTray (文字列) – 使用する用紙トレイの名前。

以下のサンプルコードでは、「標準」ページスタイルのページサイズを、A5 サイズ (高さ 14.8 cm、幅 21 cm) の横方向に設定します。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim PageStyles As Object
Dim DefPage As Object

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")

DefPage.IsLandscape = True
DefPage.Width = 21000
DefPage.Height = 14800

ページ余白、外枠、影

com.sun.star.style.PageProperties サービスには、ページの余白、外枠、影の設定用に、以下の属性が用意されています。

  • LeftMargin (ロング整数) – 100 分の 1 ミリ単位で指定したページの左余白。

  • RightMargin (ロング整数) – 100 分の 1 ミリ単位で指定したページの右余白。

  • TopMargin (ロング整数) – 100 分の 1 ミリ単位で指定したページの上余白。

  • BottomMargin (ロング整数) – 100 分の 1 ミリ単位で指定したページの下余白。

  • LeftBorder (構造体) – 左側のページ外枠線の指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • RightBorder (構造体) – 右側のページ外枠線の指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • TopBorder (構造体) – 上側のページ外枠線の指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • BottomBorder (構造体) – 下側のページ外枠線の指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • LeftBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、左側の外枠線とページ本文との距離。

  • RightBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、右側の外枠線とページ本文との距離。

  • TopBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、上側の外枠線とページ本文との距離。

  • BottomBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、下側の外枠線とページ本文との距離。

  • ShadowFormat (構造体) – ページ本文領域に対する影付き表示の指定 (com.sun.star.table.ShadowFormat に定められた構造体)。

以下のサンプルコードでは、「標準」ページスタイルの左および右側の余白を、1 センチメートルに指定しています。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim PageStyles As Object
Dim DefPage As Object

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")

DefPage.LeftMargin = 1000
DefPage.RightMargin = 1000

ヘッダとフッタ

ヘッダおよびフッタもページ属性として扱われるもので、これらも com.sun.star.style.PageProperties サービスで定義されています。 ヘッダの書式設定には、以下の属性を使用します。

  • HeaderIsOn (ブール値) – ヘッダを表示する指定。

  • HeaderLeftMargin (ロング整数) – 100 分の 1 ミリ単位で指定した、左ページ余白からヘッダまでの距離。

  • HeaderRightMargin (ロング整数) – 100 分の 1 ミリ単位で指定した、右ページ余白からヘッダまでの距離。

  • HeaderBodyDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、ページ本文領域からヘッダまでの距離。

  • HeaderHeight (ロング整数) – 100 分の 1 ミリ単位で指定した、ヘッダの高さ。

  • HeaderIsDynamicHeight (ブール値) – ヘッダの高さを表示内容に自動的に合わせる指定。

  • HeaderLeftBorder (構造体) – ヘッダの左側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • HeaderRightBorder (構造体) – ヘッダの右側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • HeaderTopBorder (構造体) – ヘッダの上側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • HeaderBottomBorder (構造体) – ヘッダの下側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • HeaderLeftBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、左側の外枠線からヘッダ本文までの距離。

  • HeaderRightBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、右側の外枠線からヘッダ本文までの距離。

  • HeaderTopBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、上側の外枠線からヘッダ本文までの距離。

  • HeaderBottomBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、下側の外枠線からヘッダ本文までの距離。

  • HeaderIsShared (ブール値) – 左右のページで共通のヘッダを使う指定 (HeaderTextHeaderTextLeftHeaderTextRight を参照)。

  • HeaderBackColor (ロング整数) – ヘッダの背景色。

  • HeaderBackGraphicURL (文字列) – 背景に表示する画像の URL。

  • HeaderBackGraphicFilter (文字列) – ヘッダの背景画像に対するフィルタ名。

  • HeaderBackGraphicLocation (列挙型) – ヘッダの背景画像の位置 (com.sun.star.style.GraphicLocation に定められた値)。

  • HeaderBackTransparent (ブール値) – ヘッダの背景を透明にする指定。

  • HeaderShadowFormat (構造体) – ヘッダに付ける影の指定 (com.sun.star.table.ShadowFormat に定められた構造体)。

フッタの書式設定には、以下の属性を使用します。

  • FooterIsOn (ブール値) – フッタを表示する指定。

  • FooterLeftMargin (ロング整数) – 100 分の 1 ミリ単位で指定した、左ページ余白からフッタまでの距離。

  • FooterRightMargin (ロング整数) – 100 分の 1 ミリ単位で指定した、右ページ余白からフッタまでの距離。

  • FooterBodyDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、ページ本文領域からフッタまでの距離。

  • FooterHeight (ロング整数) – 100 分の 1 ミリ単位で指定した、フッタの高さ。

  • FooterIsDynamicHeight (ブール値) – フッタの高さを表示内容に自動的に合わせる指定。

  • FooterLeftBorder (構造体) – フッタの左側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • FooterRightBorder (構造体) – フッタの右側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • FooterTopBorder (構造体) – フッタの上側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • FooterBottomBorder (構造体) – フッタの下側の外枠線に関する指定 (com.sun.star.table.BorderLine に定められた構造体)。

  • FooterLeftBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、左側の外枠線からフッタ本文までの距離。

  • FooterRightBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、右側の外枠線からフッタ本文までの距離。

  • FooterTopBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、上側の外枠線からフッタ本文までの距離。

  • FooterBottomBorderDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、下側の外枠線からフッタ本文までの距離。

  • FooterIsShared (ブール値) – 左右のページで共通のフッタを使う指定 (FooterTextFooterTextLeftFooterTextRight を参照)。

  • FooterBackColor (ロング整数) – フッタの背景色。

  • FooterBackGraphicURL (文字列) – 背景に表示する画像の URL。

  • FooterBackGraphicFilter (文字列) – フッタの背景画像に対するフィルタ名。

  • FooterBackGraphicLocation (列挙型) – フッタの背景画像の位置 (sun.star.style.GraphicLocation に定められた値)。

  • FooterBackTransparent (ブール値) – フッタの背景を透明にする指定。

  • FooterShadowFormat (構造体) – フッタに付ける影の指定 (details of shadow of footer (com.sun.star.table.ShadowFormat に定められた構造体)

ヘッダおよびフッタの表示テキストの変更

表計算ドキュメントのヘッダやフッタの内容へアクセスするには、以下の属性を使用します。

  • LeftPageHeaderContent (オブジェクト) - 偶数ページのヘッダの内容 (com.sun.star.sheet.HeaderFooterContent サービス)。

  • RightPageHeaderContent (オブジェクト) - 奇数ページのヘッダの内容 (com.sun.star.sheet.HeaderFooterContent サービス)。

  • LeftPageFooterContent (オブジェクト) - 偶数ページのフッタの内容 (com.sun.star.sheet.HeaderFooterContent サービス)。

  • RightPageFooterContent (オブジェクト) - 奇数ページのフッタの内容 (com.sun.star.sheet.HeaderFooterContent サービス)。

偶数ページと奇数ページで共通のヘッダやフッタを用いる場合は (FooterIsShared 属性に False を指定)、それぞれ奇数ページ用の属性を指定します。

これらのオブジェクトは、com.sun.star.sheet.HeaderFooterContent サービスをサポートしたオブジェクトを返します。 このサービスは、LeftTextCenterTextRightText という (疑似) 属性を用いて、StarSuite Calc のヘッダやフッタに関する 3 種類のテキスト情報を取得します。

以下のサンプルコードでは、「標準」テンプレートのヘッダの左側のテキストフィールドに「Just a Test.」という文字列を記入します。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim PageStyles As Object
Dim DefPage As Object
Dim HText As Object
Dim HContent As Object
Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")

DefPage.HeaderIsOn = True
HContent = DefPage.RightPageHeaderContent
HText = HContent.LeftText
HText.String = "Just a Test."
DefPage.RightPageHeaderContent = HContent

このサンプルコードの最終行に注意してください。 変更したテキストを有効にするには、テキストの変更後に TextContent オブジェクトを再度割り当てる必要があります。

文書ドキュメント (StarSuite Writer) の場合、ヘッダやフッタは単一のテキストブロックから構成されているため、他の方法でヘッダやフッタの表示テキストを変更できます。 以下の属性は、com.sun.star.style.PageProperties サービスに定義されています。

  • HeaderText (オブジェクト) – ヘッダの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

  • HeaderTextLeft (オブジェクト) – 左ページのヘッダの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

  • HeaderTextRight (オブジェクト) – 右ページのヘッダの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

  • FooterText (オブジェクト) – フッタの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

  • FooterTextLeft (オブジェクト) – 左ページのフッタの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

  • FooterTextRight (オブジェクト) – 右ページのフッタの内容を示すテキストオブジェクト (com.sun.star.text.XText サービス)。

以下のサンプルコードでは、文書ドキュメントの「標準」ページスタイルにヘッダを作成し、その表示テキストを「Just a Test.」としています。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim PageStyles As Object
Dim DefPage As Object
Dim HText As Object

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Default")

DefPage.HeaderIsOn = True
HText = DefPage.HeaderText 

HText.String = "Just a Test."

この場合は、HeaderFooterContent オブジェクトではなく、HeaderText 属性を使用してヘッダに直接アクセスしています。

中央揃え (表計算ドキュメントのみ)

com.sun.star.sheet.TablePageStyle サービスは、StarSuite Calc のページスタイルでのみ使用するもので、印刷するセル範囲をページの中央に配置させることができます。 このサービスでは、以下の属性を利用できます。

  • CenterHorizontally (ブール値) - 表セルの水平方向の配置を、中央揃えにする指定。

  • CenterVertically (ブール値) - 表セルの垂直方向の配置を、中央揃えにする指定。

印刷対象の指定 (表計算ドキュメントのみ)

スプレッドシートの書式設定では、ページ上の各種要素を印刷させるかどうかを指定できます。 com.sun.star.sheet.TablePageStyle サービスには、このような処理を行うために以下の属性が用意されています。

  • PrintAnnotations (ブール値) - セルのコメントを印刷する指定。

  • PrintGrid (ブール値) - セルの罫線を印刷する指定。

  • PrintHeaders (ブール値) - 行および列のヘッダを印刷する指定。

  • PrintCharts (ブール値) - シート上のグラフを印刷する指定。

  • PrintObjects (ブール値) - 埋め込みオブジェクトを印刷する指定。

  • PrintDrawing (ブール値) - 図形描画オブジェクトを印刷する指定。

  • PrintDownFirst (ブール値) - シートの印刷範囲が複数ページにまたがる場合に、上から下の方向に印刷してから右側のページという順番で印刷する指定。

  • PrintFormulas (ブール値) - セルの計算結果ではなく、数式を印刷する指定。

  • PrintZeroValues (ブール値) - ゼロ値を印刷する指定。

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

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

セル範囲

StarSuite には、個々のセルを示すオブジェクト (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 を作成してからループに入り、すべてのシートを対象とした検索と置換の処理を行なっています。