Semen,

I use a hidden calc doc to produce charts

i hope this can help::

greetz

Fernand

Sub AreaChart(ChartDataArray(), LabelsArray(), CName as String, CSheet as String, Optional YPos as Integer,bOrders as boolean)

 Dim Length as Integer
 Dim oCharts
 Dim oRect as new com.sun.star.awt.Rectangle
 Dim loadArgs(0) as new com.sun.star.beans.PropertyValue


    loadArgs(0).Name = "Hidden"
    loadArgs(0).Value = true

oDoc = StarDesktop.LoadComponentFromUrl("private:factory/scalc","_default",0,loadArgs())
    oSheet = oDoc.Sheets.getByIndex(0)


     oCharts = osheet.charts
     If IsMissing(ChartNum) Then ChartNum=0
         With oRect
             .X = 0
             .Y = YPos

               .Height=  12000
               .width = 12000/4 * ubound(LabelsArray())
         End With
' Remove the CName
'chart if it exists
     If oSheet.getCharts().hasByName(CName)  Then
        oSheet.getCharts().removeByName(CName)
     endif
    ' Make Chart
     oCharts.addNewByName(CName,oRect,Array(),TRUE, TRUE)
     oChart = oCharts.getByName(CName).embeddedObject
oChart.diagram = oChart.createInstance("com.sun.star.chart.AreaDiagram")
     oDiagram = ochart.getFirstDiagram()

    oCoords = oDiagram.getCoordinateSystems()
    oCoord = oCoords(0)

    oChartTypes = oCoord.getChartTypes()
    oChartType = oChartTypes(0)


    REM Wanneer Array Dataseries leeg is (Bij LO 4.3), Voeg deze dan toe
    If uBound(oChartType.getDataSeries()) = -1 Then
        oNewDataSeries = CreateUnoService("com.sun.star.chart2.DataSeries")
        oChartType.addDataSeries(oNewDataSeries)

        oNewDataSeries = CreateUnoService("com.sun.star.chart2.DataSeries")
        oChartType.addDataSeries(oNewDataSeries)
    EndIf


    oDataSeriesList = oChartType.getDataSeries()

    oDataSerieOFFERTES = oDataSeriesList(0)'=' first series
    oDataSerieORDERS = oDataSeriesList(1)'1=' 2nd series
    oDataSerieOFFERTES.color = rgb(0,184,255)
    if bOrders then
        oDataSerieOFFERTES.Transparency = 80
    else
        oDataSerieOFFERTES.Transparency = 0
    endif
    oDataSerieORDERS.color = rgb(220,35,0)
    'oDataSerieORDERS.Transparency = 50
    oXaxis = oCoord.getAxisByDimension(0, 0)

      oXaxis.TextRotation = 90

     oChart.lockControllers()
' Data
     oChart.Data.setData(ChartDataArray())
     oChart.Data.setrowDescriptions(LabelsArray())

    dim columnLabelsArray(1)

ss = "Gezien & Herinnerd voor " & sfirma & " verschenen in " & smagnaam
         columnLabelsArray(0) = "OFFERTES"
        columnLabelsArray(1) = "ORDERS"

    oChart.Data.setColumnDescriptions(columnLabelsArray())
    ' Title
     oChart.HasMainTitle=True
    oChart.Title.string = ss
    ' Labels
     oChart.DataSourceLabelsInFirstColumn = true
     oChart.DataSourceLabelsInFirstRow= false
    ' Legend
     oSheet.getCharts.getByName(CName).getEmbeddedObject.hasLegend = true

    ' Percentages
    '     Last DrawPage is oSheet.getDrawPage().getCount()-1
 
oSheet.drawpage.getByIndex(oSheet.getDrawPage().getCount()-1).model.diagram.setPropertyValue("DataCaption",0)
    'PERCENT = 2 and TEXT = 4
     oChart.unlockControllers()

End Sub





On 1/12/2014 11:52, Semen Gubarev 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?



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
For additional commands, e-mail: dev-h...@openoffice.apache.org

Reply via email to