Calc は LibreOffice に含まれる表計算ソフトウェアである。
ダイアログ・コントロールにイベントを割り当てる手順を次に示す。
※フォームコントロールをデザインするにはデザインモードをオンにする必要がある。
以上でボタンの作成は完了。実際にボタンを動作させるには、デザインモードをオフにしなければならない。デザインモードをオフにする手順は次の通り。
OpenOffice.org BasicとVisual Basicの文法はほぼ同じですが、OpenOffice.org BasicとVBAで使われるオブジェクト名はかなり異なります。
すべてのオブジェクトは Dbg_Properties と Dbg_Methods という2つのプロパティを持っています。Dbg_Properties プロパティには、そのオブジェクトが持つプロパティの一覧が文字列で格納されています。Dbg_Methods プロパティは、そのオブジェクトが持つメソッドの一覧が文字列で格納されています。
OpenOffice.org Calc で使用できるオブジェクトを次に示します。
ひとつの表(テーブルシート)はScTableSheetObjオブジェクトで表される。次の構文で特定のScTableSheetObjオブジェクトへの参照を得ることができる。
DocumentObject.CurrentController.ActiveSheet
DocumentObject.Sheets.getByIndex(シート番号)
DocumentObject.Sheets.getByName("シート名")
DocumentObject.Sheets(シート番号)
DocumentObject.CurrentController.ActiveSheet
は、現在アクティブなシートのオブジェクトを表します。
DocumentObject.Sheets.getByIndex()
と DocumentObject.Sheets()
は番号で指定したシートのオブジェクトを表します。ただし、VBAとは以下の点で異なります。
DocumentObject
.Sheets.getByName()
は名前で指定したシートのオブジェクトを表します。
シート・オブジェクトをObject型の変数に代入する例を次に示します。
Dim oDoc As Object
Dim oSheet As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
上記の例では、各オブジェクトを変数に代入しましたが、オブジェクトをいちいち変数に代入しなくても構いません。
Dim oSheet As Object
oSheet = ThisComponent.Sheets(0)
単一のセルを表すセル・オブジェクトは次の構文で表されます。
SheetObject.getCellRangeByName("セル名")
SheetObject.getCellByPosition(列番号 ,行番号)
SheetObject.getCellRangeByName()
は、名前("A1"など)で指定したセルのオブジェクトを表します。
SheetObject.getCellByPosition()
は、列番号と行番号で指定したセルのオブジェクトを表します。ただし、VBAとは以下の点で異なります。
A1、A2のように、表計算ソフトでは列番号は1から始まるのが自然です。ちょっとした違いですが、OpenOffice.org BasicのマクロがVBAより分かりづらくなる原因のひとつです。
セル・オブジェクトをObject型の変数に代入する例を次に示します。
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oCell = oSheet.getCellByPosition(0, 0)
セルの値を参照するには、セル・オブジェクトの Value
プロパティを使用します。
セルに値を代入するには、次に示す2種類の方法があります。
Value
プロパティに値を代入。Formula
プロパティに値を表す文字列を代入OpenOffice.org Basicでセルに値を代入する例を次に示します。
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oCell = oSheet.getCellByPosition(0, 0)
oCell.Value = 123
上記の例では、各オブジェクトを変数に代入しましたが、オブジェクトをいちいち変数に代入しなくても構いません。
ThisComponent.Sheets(0).getCellByPosition(0, 0).Value = 123
セル・オブジェクトの Value
プロパティに代入できるのは値だけです。たとえば、123という数値を代入したい場合は、次のようになります。
oCell.Value = 123
また、値を文字列で表現したものを String
プロパティに代入することによって、値を代入することもできます。
oCell.String = "123"
数式を設定するには、セル・オブジェクトのFormulaプロパティに設定します。
OpenOffice.org BasicからOpenOffice.org Calcのセルの値を読み書きする速度は遅く、Microsoft Excel + VBA と比較しても明らかに劣っている。これを高速化するために、複数のセルから配列に値を読み込んだり、配列から複数のセルに値を書き込むことができる。
複数のセルから配列に値を読み込むには ScCellRangeObjオブジェクトのgetDataArrayメソッドを使用する。配列から複数のセルに値を書き込むにはScCellRangeObjオブジェクトの setDataArrayメソッドを使用する。
セル・オブジェクトのメソッドはScCellObj参照。
複数のセルをひとまとめにして表すRangeオブジェクトは、次の構文で表されます。
SheetObject.getCellRangeByName("Range名")
SheetObject.getCellRangePositon(起点列番号, 起点行番号, 終点列番号, 終点行番号)
現在選択されている範囲を表すSelectionオブジェクトは、次の構文で表されます。
ThisComponent.CurrentSelection
Selection オブジェクトの使用例を次に示します。
Dim oSelect As Object
oSelect = ThisComponent.CurrentSelection
マクロでグラフを作成する例を次に示します。
Dim Sheet As Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress
Sheet = ThisComponent.Sheets.getByName("表1")
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = Sheet.RangeAddress.Sheet
RangeAddress(0).StartColumn = 0
RangeAddress(0).StartRow = 0
RangeAddress(0).EndColumn = 5
RangeAddress(0).EndRow = 11
Sheet.Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)
com.sun.star.awt.Rectangleは、矩形領域を表すオブジェクトです。com.sun.star.awt.Rectangleオブジェクトを使って、グラフを描画する領域の位置とサイズを指定します。
RangeAddressオブジェクトはグラフの元となるデータ範囲を表します。
名前 | 種類 | 意味 |
---|---|---|
Sheet | Integer | シート番号(0~) |
StartColumn | Long | 開始列番号(0~) |
StartRow | Long | 開始行番号(0~) |
EndColumn | Long | 終了列番号 |
EndRow | Long | 終了行番号 |
グラフの元となるデータ列がすべて連続している場合は、RengeAddress配列の要素数は1となります。グラフの元となるデータ列が連続していない場合は、RengeAddress配列の要素数を増やします。
たとえば、グラフの元となるデータ列が列番号0と列番号2~4の場合は、次のようにします。
Dim RangeAddress(1) As New com.sun.star.table.CellRangeAddress
RangeAddress(0).Sheet = 0
RangeAddress(0).StartColumn = 0
RangeAddress(0).StartRow = 0
RangeAddress(0).EndColumn = 0
RangeAddress(0).EndRow = 100
RangeAddress(1).Sheet = 0
RangeAddress(1).StartColumn = 2
RangeAddress(1).StartRow = 0
RangeAddress(1).EndColumn = 4
RangeAddress(1).EndRow = 100
新たにグラフを追加するには、ScChartsObjのaddNewByNameメソッドを使用します。
Chartオブジェクトのメソッドやプロパティについては com.sun.star.comp.chart2.ChartModel 参照。
グラフを作成すると、デフォルトで棒グラフになります。グラフの種類を変更するには、createInstanceメソッドを使用する。グラフの種類を次に示します。
列(棒グラフ)には標準、積み上げ、積み上げパーセントなどの種類があります。
扇には標準、分解円グラフ、ドーナツ、分解ドーナツグラフなどの種類があります。
データ系列の並び順に反時計回りに配置される。
Microsoft ExcelやIBM Lotus Symphonyの円グラフでは、データ系列の並び順に時計回りに配置される。
表面には標準、積み上げ、積み上げパーセントなどの種類があります。
線には点のみ、点および線、線のみ、3Dの線などの種類があります。
散布図には点のみ、点および線、線のみ、3Dの線などの種類があります。
レーダー網には点のみ、点および線、線のみなどの種類があります。
グラフの作成を早くするには、描画の更新を一時停止させます。lockControllersメソッドで一時停止、unlockControllersメソッドで再開する。
OpenOffice.org Calcの株価チャートには次の4種類があります。
グラフの種類 | 説明 |
---|---|
株価チャート1 | バーチャート |
株価チャート2 | ローソク足 |
株価チャート3 | バーチャートと出来高 |
株価チャート4 | ローソク足と出来高 |
それぞれの株価チャートのイメージを次に示します。
バーチャートは高値・安値・終値の3つの値からなる株価チャートで、おもに欧米で使用されている。
ローソク足は始値・高値・安値・終値の4つの値からなる株価チャートで、おもに日本で使用されている。
また、これらに加えて出来高(取引数量)を表示させることもできる。出来高は棒グラフで表示される。
データ系列の並びに注意してください。普通、株価の4本値を表す場合は、一般的に「(始値、)高値、安値、終値」という並びになります。しかし、OpenOffice.org Calcで株価チャートを作成するには、データ系列の並びを「(始値、)安値、高値、終値」にしなければなりません。
Microsoft Excelの株価チャートの場合、データ系列の並びは(始値、)高値、安値、終値となっています。
株価チャートはデフォルトで株価チャート1になっています。他の種類に変更するには、Chart.DiagramオブジェクトのVolumeプロパティおよびUpDownプロパティを設定します。
株価チャートの種類とプロパティの設定、データ系列の関係をまとめると、次のようになります。
種類 | プロパティ | データ系列 | |||||
---|---|---|---|---|---|---|---|
Volume | UpDown | 列1 | 列2 | 列3 | 列4 | 列5 | |
株価チャート1 | False | False | 安値 | 高値 | 終値 | ||
株価チャート2 | False | True | 始値 | 安値 | 高値 | 終値 | |
株価チャート3 | True | False | 出来高 | 安値 | 高値 | 終値 | |
株価チャート4 | True | True | 出来高 | 始値 | 安値 | 高値 | 終値 |
ただし、最初の列を項目名に引用する場合、データ系列1は項目名(日付や銘柄)になります。この場合、上記のデータ系列はひとつづつずれます。
出来高が含まれる株価チャートの場合、第1Y軸 (Chart.Diagram.YAxis) が出来高、第2Y軸 (Chart.Diagram.SecondaryYAxis) が4本値になります。
Microsoft Excelの株価チャートの場合、取引高を棒グラフではなく折れ線グラフなどに変更することができます。しかし、OpenOffice.org Calcの場合は変更できないようです。折れ線グラフに変更できれば、取引高の代わりに移動平均線を表示できて便利なのですが…。
ローソク足の上ヒゲおよび下ヒゲはデフォルトの色(例えば、データ系列1ならば青)で表示される。色を変えたい場合は変更する。
株価チャートを作成する例を次に示す。
Chart = Charts.getByName("MyChart").embeddedObject
' 株価チャートの作成
Chart.Diagram = Chart.createInstance("com.sun.star.chart.StockDiagram")
' ローソク足
Chart.Diagram.UpDown = True
' 出来高を表示しない
Chart.Diagram.Volume = False
' 陰線の周囲の色を黒に変える
Chart.Diagram.DownBar.LineColor = RGB(0, 0, 0)
' ヒゲの色を黒に変える
Chart.Diagram.MinMaxLine.LineColor = RGB(0, 0, 0)