On Mon, Dec 1, 2014 at 3:52 AM, Semen Gubarev <mnog...@gmail.com> wrote:
> Hello Everyone! > I read a lot of documentation about creation charts using macro BASIC > And I still can't create chart in Writer (almost all documentation describe > how to create chart in Calc). The problem with inserting series XY data > into chart (separate X values and separate Y values) > > First of all I create a chart object like this: > > 'Prepare embedded object > Dim oEmbeddedObject > oEmbeddedObject = > oDoc.CreateInstance("com.sun.star.text.TextEmbeddedObject") > oEmbeddedObject.SetPropertyValue("CLSID", > "12dcae26-281f-416f-a234-c3086127382e") > oEmbeddedObject.Name = "ChartID" > > 'Insert chart in document > oCursor.GetText().InsertTextContent(oCursor, oEmbeddedObject, False) > > 'The first approach inserting data like this: > oDocChart.Diagram.DataRowSource = > com.sun.star.chart.ChartDataRowSource.ROWS > Dim aData(1, 3) > aData(0, 0) = 10 > aData(0, 1) = 20 > aData(0, 2) = 30 > aData(1, 0) = 10 > aData(1, 1) = 40 > aData(1, 2) = 90 > Dim oData as Object > oData = oDocChart.Data > oData.Data = aData > for this case I get 2 series Y data, but I need 1 series with data X-Y > > 'The second approach inserting data using Writer table as datasource > 'I'will miss a lot of code > > Dim oChartType > oChartType = > oDocChart.FirstDiagram.GetCoordinateSystems()(0).GetChartTypes()(0) > > Dim oDataProv > oDataProv = oDoc.createInstance( "com.sun.star.chart2.data.DataProvider" ) > > Dim oDataSeries > oDataSeries = CreateDataSeries_XYDiagram(oDataProv, "table1.A1:A10", > "table1.B1:B10") > > Dim oNewDataSeriesList(0) as Object 'new data series > oNewDataSeriesList(0) = oDataSeries > > 'Correspond with last approach I get good chart, but after reopening the > document Y values become to X values > > The question is, how to right create a X-Y chart? > Hello Semen, I find that the code below, a slight modification of yours, works for me. -------------------------------- oDoc = ThisComponent oCursor = oDoc.Text.createTextCursor() oTextObject = oDoc.CreateInstance("com.sun.star.text.TextEmbeddedObject") oTextObject.SetPropertyValue("CLSID", "12dcae26-281f-416f-a234-c3086127382e") oTextObject.Name = "ChartID" 'Insert chart in document oCursor.GetText().InsertTextContent(oCursor, oTextObject, False) oDocChart = oTextObject.EmbeddedObject.Component 'The first approach inserting data like this: oDocChart.Diagram = oDocChart.createInstance("com.sun.star.chart.XYDiagram") oDocChart.Diagram.DataRowSource = com.sun.star.chart.ChartDataRowSource.ROWS Dim aData(1, 2) aData(0, 0) = 10 aData(0, 1) = 20 aData(0, 2) = 30 aData(1, 0) = 10 aData(1, 1) = 40 aData(1, 2) = 90 oDocChart.Data.Data = aData oDocChart.DataSourceLabelsInFirstRow = False ------------------------------------ I hope that helps. Best regards, Francis