Hi, thanks for the hints.
Finally I managed to get my object from the ServiceManager. Here is the complete code for inserting an (empty) XY-Chart into a Writer document: Reference < XTextContent > insertChart(const Reference < XController > &xCtrl, const Reference < XComponentContext > &xCC) { Reference < XTextCursor > xModelCursor; Reference < XText > xDocumentText = getDocumentText(xCtrl, xModelCursor); Reference < XTextContent > xChart = createObject(xCtrl, CLSID_CHART); // Insert the chart // TODO: This does not replace a selection with the chart (because we are accessing the model cursor to get xRange?) // But do we want this? The selection might be the iFormula we are basing the chart on! Reference < XTextRange > xRange(xModelCursor, UNO_QUERY_THROW); xDocumentText->insertTextContent(xRange, xChart, true); // Get a factory to create objects for this chart Reference < XEmbeddedObjectSupplier > xEOS(xChart, UNO_QUERY_THROW); Reference < com::sun::star::chart::XChartDocument > cDoc(xEOS->getEmbeddedObject(), UNO_QUERY_THROW); Reference < XMultiServiceFactory > cDocMSF(cDoc, UNO_QUERY_THROW); // Make sure that we have a clear interpretation of where data series are Reference < XPropertySet > cDocProps (cDoc, UNO_QUERY_THROW); cDocProps->setPropertyValue(OU("DataRowSource"), makeAny(::com::sun::star::chart::ChartDataRowSource_ROWS)); // Create a new XYDiagram Reference < XDiagram > xyDiagram(cDocMSF->createInstance(OU("com.sun.star.chart.XYDiagram")), UNO_QUERY_THROW); cDoc->setDiagram(xyDiagram); // Create two new sequences based on the two first default sequences, setting the roles correctly for an XYDiagram Reference < ::com::sun::star::chart2::XChartDocument > chart(xEOS->getEmbeddedObject(), UNO_QUERY_THROW); chart->createInternalDataProvider(true); Reference< XDataProvider > dataProvider = chart->getDataProvider(); Reference< XDataSequence > seqDataX = dataProvider->createDataSequenceByRangeRepresentation(OU("0")); Reference < XPropertySet > seqProps (seqDataX, UNO_QUERY_THROW); seqProps->setPropertyValue(OU("Role"), makeAny(OU("values-x"))); Reference< XDataSequence > seqLabelX = dataProvider->createDataSequenceByRangeRepresentation(OU("label 0")); Reference< XDataSequence > seqDataY = dataProvider->createDataSequenceByRangeRepresentation(OU("1")); seqProps = Reference< XPropertySet >(seqDataY, UNO_QUERY_THROW); seqProps->setPropertyValue(OU("Role"), makeAny(OU("values-y"))); Reference< XDataSequence > seqLabelY = dataProvider->createDataSequenceByRangeRepresentation(OU("label 1")); // Get write access to the chart series Reference< ::com::sun::star::chart2::XDiagram > diagram = chart->getFirstDiagram(); Reference< XCoordinateSystemContainer > xCoordCnt(diagram, UNO_QUERY_THROW); Reference< XChartTypeContainer > xChartTypeCnt(xCoordCnt->getCoordinateSystems()[0], UNO_QUERY_THROW); Reference< XDataSeriesContainer > chartType(xChartTypeCnt->getChartTypes()[0], UNO_QUERY_THROW); // Create two sequences Reference< XMultiComponentFactory > xServiceManager(xCC->getServiceManager()); // get the service manager (the document service factory cannot create a LabeledDataSequence!) Sequence< Reference< XLabeledDataSequence > > sequences(2); sequences[0] = Reference< XLabeledDataSequence > (xServiceManager->createInstanceWithContext(OU("com.sun.star.chart2.data.LabeledDataSequence"), xCC), UNO_QUERY_THROW); sequences[1] = Reference< XLabeledDataSequence > (xServiceManager->createInstanceWithContext(OU("com.sun.star.chart2.data.LabeledDataSequence"), xCC), UNO_QUERY_THROW); sequences[0]->setValues(seqDataX); sequences[0]->setLabel(seqLabelX); sequences[1]->setValues(seqDataY); sequences[1]->setLabel(seqLabelY); // Set the data sequences into the chart Reference< XDataSink > XYSink(xServiceManager->createInstanceWithContext(OU("com.sun.star.chart2.DataSeries"), xCC), UNO_QUERY_THROW); XYSink->setData(sequences); Sequence< Reference< XDataSeries > > XYSeries(1); XYSeries[0] = Reference< XDataSeries > (XYSink, UNO_QUERY_THROW); chartType->setDataSeries(XYSeries); return xChart; } // insertChart() _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice