Sub draw_data() Dim N As Long, i As Long Dim x As Double, dx As Double N = 100 x = 0 dx = 3.14 * 2 / N ' データ作成部 ThisComponent.addActionLock() ' グラフが存在する場合、ロックをかけないとセル記入が遅くなる If ThisComponent.Sheets(0).Charts.hasByName("datagraph") = True Then ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.LockControllers End If For i = 0 To N - 1 ThisComponent.Sheets(0).getCellByPosition(0, i).Value = x ThisComponent.Sheets(0).getCellByPosition(1, i).Value = Sin(x) ThisComponent.Sheets(0).getCellByPosition(2, i).Value = Cos(x) x = x + dx Next i If ThisComponent.Sheets(0).Charts.hasByName("datagraph") = True Then ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.LockControllers End If ThisComponent.removeActionLock() Dim Rect As New com.sun.star.awt.Rectangle Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress ' グラフが存在しなければ描画する If ThisComponent.Sheets(0).Charts.hasByName("datagraph") = False Then ' グラフ位置 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 = N - 1 ' 一つ目の False を True にすると、一行目を各系列名とするようになる。 ' 二つ目の False を True にすると一列目が各系列名となるらしい ThisComponent.Sheets(0).Charts.addNewByName("datagraph", Rect, RangeAddress(), False, False) ' ここでグラフをロックしておくと後の処理が高速 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.LockControllers ' 各系列の名前(凡例に用いられる) ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject().Data.setColumnDescriptions(Array("x","sin(x)","cos(x)") ' 散布図を選択 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram _ = ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.createInstance("com.sun.star.chart.XYDiagram") ' データポイントなし ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.SymbolType =-3 ' no points ' 一本目の系列(sin(x))を青にして太く ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.getDataRowProperties(1).LineColor = RGB(0,0,255) ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.getDataRowProperties(1).LineWidth = 50 ' 二本目の系列(cos(x))を赤にして太く ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.getDataRowProperties(2).LineColor = RGB(255,0,0) ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.getDataRowProperties(2).LineWidth = 50 ' x 軸のスケール設定 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.AutoMin = False ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.Min = 0 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.AutoMax = False ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.Max = 6.28 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.AutoStepMain = False ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxis.StepMain = 1.57 ' x 軸のラベル設定 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.HasXAxisTitle = True ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.XAxisTitle.String ="x" ' y 軸のラベル設定 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.HasYAxisTitle = True ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Diagram.YAxisTitle.String ="y" ' グラフタイトル設定 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.HasMainTitle = True ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Title.String ="y=sin(x) と y=cos(x) のグラフ" ' 凡例を下に ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.HasLegend = True ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM ' ロック解除 ThisComponent.Sheets(0).Charts.getByName("datagraph").embeddedObject.UnLockControllers End If End Sub |