StarSuite 8 Basic プログラミングガイド
검색에만이 책은
PDF로 이 문서 다운로드 (1383 KB)

第 9 章 グラフ (ダイアグラム)

StarSuite にはデータをグラフ化して表示する機能が用意されており、棒グラフ、円グラフ、折れ線グラフなど、各種の表示が可能です。データの表示は 2D グラフか 3D グラフを選択でき、これらグラフを構成する各要素に関しても、図形描画要素の場合と同様の方法で表示設定が行えます。

表計算ドキュメント上に用意されたデータに関しては、個々の値と動的にリンクしたグラフを作成できます。つまりこの場合、データの値に変更が加えられると、その結果がただちにグラフに反映されます。本章では、StarSuite に用意されたグラフモジュール用のプログラミングインターフェースの概要を説明し、表計算ドキュメント上でのグラフ操作に焦点を当てます。

表計算ドキュメントでのグラフ操作

StarSuite でのグラフは、独立したドキュメントとしてではなく、既存のドキュメント内に埋め込まれたオブジェクトとして扱われます。

文章ドキュメントや図形描画ドキュメントの場合、グラフは他のコンテンツから独立した存在として扱われますが、表計算ドキュメントのグラフは、ドキュメント上のデータとリンクさせてグラフを作成できます。以下のサンプルコードは、このような表計算ドキュメントとグラフの関係を説明しています。

Dim Doc As Object 
Dim Charts As Object 
Dim Chart as Object

Dim Rect As New com.sun.star.awt.Rectangle 
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

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

Rect.X = 8000 
Rect.Y = 1000 
Rect.Width = 10000 
Rect.Height = 7000

RangeAddress(0).Sheet = 0 
RangeAddress(0).StartColumn = 0 
RangeAddress(0).StartRow = 0 
RangeAddress(0).EndColumn = 2 
RangeAddress(0).EndRow = 12

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)

上記のサンプルコードは一見するとかなり複雑に感じられますが、主要な処理は 3 行に集約されます。その 1 つ目は、現在の表計算ドキュメントを参照するために、Doc というドキュメント変数を用意する行です (Doc = StarDesktop.CurrentComponent)。2 つ目は、表計算ドキュメントの最初の表 (スプレッドシート) 上を対象に、存在するすべてのグラフを登録したリストを作成する行です (Charts = Doc.Sheets(0).Charts)。3 つ目は addNewByName メソッドを用いて、この既存グラフのリストに新規グラフを登録する行です。新規に作成したグラフは、この処理を経て初めて画面上に表示されます。

最終行の addNewByName メソッドのパラメータでは、Rect および RangeAddress という変数を用いて、グラフ描画に必要な情報を指定しています。この Rect には、表計算ドキュメント上でのグラフの表示位置を設定します。同じく RangeAddress には、グラフのデータ範囲を設定します。

上記のサンプルコードのままでは、作成されるグラフは常に縦棒グラフとなります。作成したグラフの種類を棒グラフ以外に変更するには、以下のようなコードを追加して、表示するグラフの種類を明示的に指定する必要があります。

Chart = Charts.getByName("MyChart").embeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")

上記のコードの最初の行は、対象とするグラフオブジェクトを特定するための処理です。その次の行は、作成済みのグラフの種類を変更する処理で、この場合は折れ線グラフを指定しています。


注 –

Excel の場合、ドキュメント中のワークシート (スプレッドシート) として挿入したグラフと、ワークシート上に埋め込んだグラフとは、明確に区別されています。そのため、これらのグラフへのアクセスに関しても、異なる 2 通りの方法が用意されています。これに対して StarSuite Basic の場合、StarSuite Calc のグラフは、常に表 (スプレッドシート) への埋め込みグラフとして作成されます。このためグラフへのアクセスも、常に Sheet オブジェクトの Charts リストを用いて行います。


グラフの構造

グラフの構造および、そのサポートするサービスやインターフェースは、個々のグラフの種類ごとに異なります。たとえば Z 軸に関係するメソッドや属性は、3D グラフでのみ使用可能で、2D グラフでは利用できません。同じく円グラフには、グラフ軸に関するインターフェースは用意されていません。

グラフの構成要素

タイトル、サブタイトル、凡例

グラフを構成する基本的な要素としては、タイトル、サブタイトル、凡例が挙げられます。個々のグラフには、これらの要素に対応するオブジェクトが存在します。そして Chart オブジェクトには、このようなオブジェクトの操作用に、以下の属性が用意されています。

  • HasMainTitle (ブール値) – タイトルを表示する指定。

  • Title (オブジェクト) – グラフのタイトルに関する情報を収めたオブジェクト (com.sun.star.chart.ChartTitle サービスをサポート)。

  • HasSubTitle(ブール値) – サブタイトルを表示する指定。

  • Subtitle (オブジェクト) – グラフのサブタイトルに関する情報を収めたオブジェクト (com.sun.star.chart.ChartTitle サービスをサポート)。

  • HasLegend (ブール値) – 凡例を表示する指定。

  • Legend (オブジェクト) – グラフの凡例表示に関する情報を収めたオブジェクト (com.sun.star.chart.ChartLegendPosition サービスをサポート)。

ここで取り上げたグラフ要素には、図形描画要素と共通する部分が多数あります。これは、com.sun.star.chart.ChartTitle サービスおよび com.sun.star.chart.ChartLegendPosition サービスが、図形描画要素の根幹を成す com.sun.star.drawing.Shape サービスをサポートしているためです。

そのため、これらの要素についても、Size および Position 属性を用いて位置やサイズを確認することができます。

また要素の表示設定についても、塗りつぶし属性や線属性 (com.sun.star.drawing.FillProperties および com.sun.star.drawing.LineStyle サービス) および文字属性 (com.sun.star.style.CharacterProperties サービス) を使用できます。

com.sun.star.chart.ChartTitle サービスには、先に説明した属性の他に、以下の 2 つの属性も用意されています。

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

  • String (文字列) – タイトルまたはサブタイトルとして表示するテキスト。

グラフの凡例 (com.sun.star.chart.ChartLegend サービス) に関しては、以下の属性も用意されています。

  • Alignment (列挙型) – 凡例の表示位置の指定 (com.sun.star.chart.ChartLegendPosition に定められた値)。

以下のサンプルコードでは、グラフを作成して、そのタイトルを「Test」、サブタイトルを「Test 2」とし、凡例表示の設定を行なっています。凡例表示については、背景色を灰色、表示位置をグラフの下部、テキストサイズを 7 ポイントとしています。

Dim Doc As Object 
Dim Charts As Object 
Dim Chart as Object

Dim Rect As New com.sun.star.awt.Rectangle 
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Rect.X = 8000 
Rect.Y = 1000 
Rect.Width = 10000 
Rect.Height = 7000

RangeAddress(0).Sheet = 0 
RangeAddress(0).StartColumn = 0 
RangeAddress(0).StartRow = 0 
RangeAddress(0).EndColumn = 2 
RangeAddress(0).EndRow = 12

Doc = StarDesktop.CurrentComponent 
Charts = Doc.Sheets(0).Charts 
Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True) 
Chart = Charts.getByName("MyChart").EmbeddedObject

Chart.HasMainTitle = True 
Chart.Title.String = "Test"

Chart.HasSubTitle = True 
Chart.Subtitle.String = "Test 2"

Chart.HasLegend = True 
Chart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
Chart.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID 
Chart.Legend.FillColor = RGB(210, 210, 210) 
Chart.Legend.CharHeight = 7

背景

各グラフには、背景表示用の領域 (グラフエリア) があります。この領域にも対応するオブジェクトが存在し、このようなグラフオブジェクトへのアクセスには以下の属性を使用します。

  • Area (オブジェクト) – グラフ背景の表示エリア (com.sun.star.chart.ChartArea サービスをサポート)。

ここで言うグラフの背景 (グラフエリア) とは、タイトル、サブタイトル、凡例などの表示位置も含めた、グラフ全体をカバーする領域を指します。この部分を扱う com.sun.star.chart.ChartArea サービスは、線属性と塗りつぶし属性をサポートしていますが、その他の属性は特に使用しません。

グラフの壁面と床面

グラフの背景がグラフの全域を指すのに対して、グラフの壁面は、データの表示領域のみを対象とします。

通常 3D グラフに関しては、グラフの壁面が 2 つあります。その 1 つはデータの表示領域の背面に表示され、もう 1 つは Y 軸側に表示されます。また 3D グラフには、床面も表示されます。

  • Floor (オブジェクト) - グラフの床面 (3D グラフのみ。com.sun.star.chart.ChartArea サービスをサポート)。

  • Wall (オブジェクト) - グラフの壁面 (3D グラフのみ。com.sun.star.chart.ChartArea サービスをサポート)。

これらのオブジェクトは com.sun.star.chart.ChartArea サービスをサポートしているので、線属性および塗りつぶし属性を利用できます (com.sun.star.drawing.FillProperties および com.sun.star.drawing.LineStyle に関しては第 8 章「図形描画とプレゼンテーション」を参照してください)。

壁面と床面は Chart オブジェクトの一部であり、これらのアクセスにも Chart オブジェクトを使用します。

Chart.Area.FillBitmapName = "Sky"   

以下のサンプルコードでは、グラフの背景として、StarSuite に標準で用意されている画像 (名称 Sky) を表示させています。

Dim Doc As Object 
Dim Charts As Object 
Dim Chart as Object

Dim Rect As New com.sun.star.awt.Rectangle 
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

Rect.X = 8000 
Rect.Y = 1000 
Rect.Width = 10000 
Rect.Height = 7000

RangeAddress(0).Sheet = 0 
RangeAddress(0).StartColumn = 0 
RangeAddress(0).StartRow = 0 
RangeAddress(0).EndColumn = 2 
RangeAddress(0).EndRow = 12

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

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True) 
Chart = Charts.getByName("MyChart").EmbeddedObject

Chart.Area.FillStyle = com.sun.star.drawing.FillStyle.BITMAP 
Chart.Area.FillBitmapName = "Sky" 
Chart.Area.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

グラフ軸

StarSuite では、5 種類のグラフ軸が利用できます。通常表示されるのは、X 軸と Y 軸です。3D グラフの中には、Z 軸が表示されるものもあります。また個々のデータ列間が相互に異なる値をもつような場合、StarSuite では X 軸と Y 軸の第 2 数値軸を表示させることができます。

X 、Y 、Z の主軸

X 、Y 、Z の各軸については、タイトル、ラベル、目盛線、補助目盛線を表示できます。これらの要素については、その表示と非表示を個別に設定できます。グラフオブジェクトには、これらの設定を行うため、以下の属性が用意されています (ここでは X 軸に関する説明となっていますが、その他の軸についても同様)。

  • HasXAxis (ブール値) – X 軸を表示する指定。

  • XAxis (オブジェクト) – X 軸に関する情報を収めたオブジェクト (com.sun.star.chart.ChartAxis サービスをサポート)。

  • HasXAxisDescription (ブール値) – X 軸のラベルを表示する指定。

  • HasXAxisGrid (ブール値) – X 軸の主目盛線を表示する指定。

  • XMainGrid (オブジェクト) – X 軸の主目盛線に関する情報を収めたオブジェクト (com.sun.star.chart.ChartGrid サービスをサポート)。

  • HasXAxisHelpGrid (ブール値) – X 軸の補助目盛線を表示する指定。

  • XHelpGrid (オブジェクト) – X 軸の補助目盛線に関する情報を収めたオブジェクト (com.sun.star.chart.ChartGrid サービスをサポート)。

  • HasXAxisTitle (ブール値) – X 軸のタイトルを表示する指定。

  • XAxisTitle (オブジェクト) – X 軸のタイトルに関する情報を収めたオブジェクト (com.sun.star.chart.ChartTitle サービスをサポート)。

X 、Y の第 2 数値軸

X 軸および Y 軸の第 2 数値軸 (第 2 軸)に関しては、以下の属性が用意されています (ここでは X の第 2 数値軸について説明)。

  • HasSecondaryXAxis (ブール値) – X 軸の第 2 数値軸を表示する指定。

  • SecondaryXAxis (オブジェクト) – X 軸の第 2 数値軸に関する情報を収めたオブジェクト (com.sun.star.chart.ChartAxis サービスをサポート)。

  • HasSecondaryXAxisDescription (ブール値) – X 軸の第 2 数値軸のラベルを表示する指定。

グラフ軸の属性

StarSuite のグラフで使用する軸オブジェクトは、com.sun.star.chart.ChartAxis サービスをサポートしています。ここでは文字 (com.sun.star.style.CharacterProperties サービスについては第 6 章「文書ドキュメント」を参照) および線 (com.sun.star.drawing.LineStyle サービスについては第 8 章「図形描画とプレゼンテーション」を参照) に関係する属性に加えて、以下の属性が用意されています。

  • Max (倍精度) - 軸の最大値。

  • Min (倍精度) - 軸の最小値。

  • Origin (倍精度) - 軸の原点。

  • StepMain (倍精度) - 軸の主目盛線の間隔。

  • StepHelp (倍精度) - 軸の補助目盛線の間隔。

  • AutoMax (ブール値) - 軸の最大値を自動判定する指定。

  • AutoMin (ブール値) - 軸の最小値を自動判定する指定。

  • AutoOrigin (ブール値) - 軸の原点を自動判定する指定。

  • AutoStepMain (ブール値) - 軸の主目盛線の間隔を自動判定する指定。

  • AutoStepHelp (ブール値) - 軸の補助目盛線の間隔を自動判定する指定。

  • Logarithmic (ブール値) - 軸を対数目盛にする指定 (通常は線形表示)。

  • DisplayLabels (ブール値) - 軸ラベルを表示する指定。

  • TextRotation (ロング整数) - 100 分の 1 度単位で指定した軸ラベルの回転角。

  • Marks (定数) - 軸の区切りを、グラフエリアの内側または外側に表示する指定 (com.sun.star.chart.ChartAxisMarks に定められた値)。

  • HelpMarks (定数) - 軸の補助区切りを、グラフエリアの内側または外側に表示する指定 (com.sun.star.chart.ChartAxisMarks に定められた値)。

  • Overlap (ロング整数) - パーセント単位で指定した、データ系列間の棒の重なり合い具合 (100 % で棒同士は完全に重なり合い、-100 % で棒の幅分だけの間隔を確保)。

  • GapWidth (ロング整数) - パーセント単位で指定した、各データグループ間の棒の間隔 (100 % で棒の幅分だけの間隔を確保)。

  • ArrangeOrder (列挙型) - 軸ラベルの配置を 1 列に並べるか、上下交互 2 列に並べるかの指定 (com.sun.star.chart.ChartAxisArrangeOrderType に定められた値)。

  • TextBreak (ブール値) - 折り返し表示を許可する指定。

  • TextCanOverlap (ブール値) - ラベルの重ね合わせを許可する指定。

  • NumberFormat (ロング整数) - 数の書式 (第 7 章の「数値、日付、テキストの表示書式」を参照)。

軸目盛線の属性

軸目盛線のオブジェクトは、com.sun.star.chart.ChartGrid サービスをベースとしており、その表示設定には com.sun.star.drawing.LineStyle サービスの属性を使用します (第 8 章「図形描画とプレゼンテーション」を参照してください)。

軸タイトルの属性

軸タイトルの表示設定に用いるオブジェクトは、グラフタイトルと同様に、com.sun.star.chart.ChartTitle サービスをベースとしています。

以下のサンプルコードを実行すると、折れ線グラフが作成されます。ここでグラフの壁面は、表示色を白に設定しています。X 軸および Y 軸に関しては、目盛線を灰色で表示しています。なお Y 軸の最小値を 0、最大値を 100 とするよう明示的に指定してあるため、表示するデータが変更されても、このグラフの表示範囲は固定されたままになります。

Dim Doc As Object 
Dim Charts As Object 
Dim Chart as Object

Dim Rect As New com.sun.star.awt.Rectangle 
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress

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

Rect.X = 8000 
Rect.Y = 1000 
Rect.Width = 10000 
Rect.Height = 7000

RangeAddress(0).Sheet = 0 
RangeAddress(0).StartColumn = 0 
RangeAddress(0).StartRow = 0 
RangeAddress(0).EndColumn = 2 
RangeAddress(0).EndRow = 12

Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)

Chart = Charts.getByName("MyChart").embeddedObject 
Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")

Chart.Diagram.Wall.FillColor = RGB(255, 255, 255)

Chart.Diagram.HasXAxisGrid = True 
Chart.Diagram.XMainGrid.LineColor = RGB(192, 192, 192)

Chart.Diagram.HasYAxisGrid = True 
Chart.Diagram.YMainGrid.LineColor = RGB(192, 192, 192)

Chart.Diagram.YAxis.Min = 0 
Chart.Diagram.YAxis.Max = 100

3D グラフ

StarSuite のグラフの多くは、3 次元表示が可能です。このような 3D 表示が可能なグラフは、com.sun.star.chart.Dim3DDiagram サービスをサポートしています。このサービスには、以下の属性のみが用意されています。

  • Dim3D (ブール値) – 3D 表示をする指定。

積み上げグラフ

積み上げグラフとは、複数のデータ系列の値を積み上げる形で表示し、その総和を示すためのグラフです。このグラフを利用すると、各データ系列ごとの値だけでなく、これらの総計も同時に確認できます。

StarSuite に用意されているグラフの多くは、積み上げグラフによる表示に対応しています。これに該当するグラフ種は、すべて com.sun.star.chart.StackableDiagram サービスをサポートしており、以下の属性を使用できます。

  • Stacked (ブール値) – 積み上げグラフによる表示の指定。

  • Percent (ブール値) – 通常の数値表示ではなく、個々の構成比をパーセント表示する指定。

グラフの種類

折れ線グラフ

折れ線グラフ (com.sun.star.chart.LineDiagram サービス) では、最大で X 軸を 1 本、Y 軸を 2 本、Z 軸を 1 本表示できます。またこのグラフでは 2D 表示だけでなく、3D 表示 (com.sun.star.chart.Dim3Ddiagram サービス) も使用できます。また、積み上げグラフの表示 (com.sun.star.chart.StackableDiagram) も可能です。

折れ線グラフには、以下の属性を指定できます。

  • SymbolType (定数) - データポイントの表示記号の指定 (com.sun.star.chart.ChartSymbolType に定められた定数値)。

  • SymbolSize (ロング整数) - 100 分の 1 ミリ単位で指定した、データポイント表示記号のサイズ。

  • SymbolBitmapURL (文字列) - データポイントの表示記号とする画像のファイル名。

  • Lines (ブール値) - データポイント間を線でつなぐ指定。

  • SplineType (ロング整数) - グラフの線に対して平滑線 (スプライン) 処理を行う指定 (0: 平滑線なし、1: 平滑線つなぎ、2: B 平滑線)。

  • SplineOrder (ロング整数) - スプライン処理の次数 (B 平滑線のみ)。

  • SplineResolution (ロング整数) - スプライン処理で使用する中間点の数。

エリアグラフ

エリアグラフ (com.sun.star.chart.AreaDiagram サービス) では、最大で X 軸を 1 本、Y 軸を 2 本、Z 軸を 1 本表示できます。 またこのグラフでは 2D 表示だけでなく、3D 表示 (com.sun.star.chart.Dim3Ddiagram サービス) も使用できます。また、積み上げグラフの表示 (com.sun.star.chart.StackableDiagram) も可能です。

棒グラフ

棒グラフ (com.sun.star.chart.BarDiagram サービス) では、最大で X 軸を 1 本、Y 軸を 2 本、Z 軸を 1 本表示できます。またこのグラフでは 2D 表示だけでなく、3D 表示 (com.sun.star.chart.Dim3Ddiagram サービス) も使用できます。また、積み上げグラフの表示 (com.sun.star.chart.StackableDiagram) も可能です。

棒グラフには、以下の属性を指定できます。

  • Vertical (ブール値) — 標準の横棒表示に対して、縦棒表示とする指定。

  • Deep (ブール値) - 3D 表示の際に、棒を交互に並べるのではなく、前後方向に並べる指定。

  • StackedBarsConnected (ブール値) - 積み上げグラフ表示の際に、棒を線でつなぐ指定 (水平表示の場合のみ指定可能)。

  • NumberOfLines (ロング整数) - 積み上げグラフ表示の際に、棒ではなく折れ線表示させる数。

円グラフ

円グラフ (com.sun.star.chart.PieDiagram サービス) は、軸を表示することも、積み上げグラフとすることもできません。ただしこのグラフでも、2D 表示および、3D 表示 (com.sun.star.chart.Dim3Ddiagramサービス) を使用できます。