Contained WithinFind More DocumentationFeatured Support Resources | 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 サービスをサポートしています。 このサービスは、シート編集用の各種インターフェースを提供するもので、以下の属性を利用できます。 シートの作成、削除、名前の変更表計算ドキュメント (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 サービスをサポートしており、以下の属性を利用できます。 列の幅は、OptimalWidth 属性に True を指定した場合のみ、自動的に最適化されます。 個々のセル幅が変更されても、そのセルを含む列の幅は変更されません。 実際の機能面から見た場合、OptimalWidth は属性ではなくメソッドとして分類されるべきものです。 行オブジェクトは com.sun.star.table.RowColumn サービスをベースとしており、以下の属性を利用できます。 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 のセルに、それぞれ数値、テキスト、数式を入力しています。 注 – Value、String、Formula 属性は、セルの値を指定する 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 の値を取得できます。 返される値は、以下のいずれかです。
セルの挿入、削除、コピー、移動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 構造体を使用します。 この構造体には、以下の値を設定できます。
これらの設定の終了した CellRangeAddress 構造体は、insertCells メソッドの第 1 パラメータとして渡します。 insertCells メソッドの第 2 パラメータには、セル範囲の挿入位置にある既存セルの処置を指定するため、com.sun.star.sheet.CellInsertMode の値を渡します。 この CellInsertMode には、以下の値が用意されています。
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 の値により指定します。
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 には、以下の値を設定できます。
moveRange メソッドを使用した場合、移動先のセルの内容は常に上書きされます。 InsertCells メソッドの場合とは異なり、removeRange メソッドには、移動先のセルを自動的に移動させるパラメータは用意されていません。 copyRange メソッドの使用法は moveRange メソッドと同様ですが、copyRange の場合はセル範囲の移動ではなくコピーを行うという相違点があります。 注 – 機能面から見た場合、StarSuite Basic の insertCell、removeRange、copyRange の各メソッドは、VBA の Range.Insert、Range.Delete、Range.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 サービスには、背景色および影の表示指定用に、以下の属性が用意されています。 com.sun.star.table.ShadowFormat 構造体とセルの影指定は、以下のような関係になっています。
以下のサンプルコードでは、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 には、セルのテキスト配置を指定する各種の機能が用意されています。 以下の属性は、テキストの水平および垂直方向の配置を指定するものです。
以下のサンプルコードでは、左上隅にあるセルの表示を「縦書き」 (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 サービスには、ページ背景に関する以下の属性が用意されています。 ページ書式ページ書式の指定には、com.sun.star.style.PageProperties サービスを使用します。 以下のサンプルコードでは、「標準」ページスタイルのページサイズを、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 サービスには、ページの余白、外枠、影の設定用に、以下の属性が用意されています。
以下のサンプルコードでは、「標準」ページスタイルの左および右側の余白を、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 サービスで定義されています。 ヘッダの書式設定には、以下の属性を使用します。
フッタの書式設定には、以下の属性を使用します。
ヘッダおよびフッタの表示テキストの変更表計算ドキュメントのヘッダやフッタの内容へアクセスするには、以下の属性を使用します。
偶数ページと奇数ページで共通のヘッダやフッタを用いる場合は (FooterIsShared 属性に False を指定)、それぞれ奇数ページ用の属性を指定します。 これらのオブジェクトは、com.sun.star.sheet.HeaderFooterContent サービスをサポートしたオブジェクトを返します。 このサービスは、LeftText、CenterText、RightText という (疑似) 属性を用いて、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 サービスに定義されています。
以下のサンプルコードでは、文書ドキュメントの「標準」ページスタイルにヘッダを作成し、その表示テキストを「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 のページスタイルでのみ使用するもので、印刷するセル範囲をページの中央に配置させることができます。 このサービスでは、以下の属性を利用できます。 印刷対象の指定 (表計算ドキュメントのみ)スプレッドシートの書式設定では、ページ上の各種要素を印刷させるかどうかを指定できます。 com.sun.star.sheet.TablePageStyle サービスには、このような処理を行うために以下の属性が用意されています。 表計算ドキュメントの効率的な編集方法これまでの節では、表計算ドキュメントの基本構造について説明しましたが、この節では個々のセルやセル範囲への効率的なアクセスについて説明します。 セル範囲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 に定められています。 指定可能な定数値は以下のものです。
以下のサンプルコードでは、セル範囲 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 に定められている定数値を、フラグとして指定します。 このような定数値としては、以下の値を使用できます。
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 を作成してからループに入り、すべてのシートを対象とした検索と置換の処理を行なっています。 |