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