diff options
author | Katarina Behrens <bubli@bubli.org> | 2013-02-13 15:44:34 +0100 |
---|---|---|
committer | Thorsten Behrens <tbehrens@suse.com> | 2013-02-13 18:21:55 +0100 |
commit | 32edd34a2056f0eba1a44fd01743908b1a4729b5 (patch) | |
tree | bf6dc781234796df8148cccc39ea0f94fb0ca176 /oox | |
parent | 30862ca42c6b548a2dce99c0f2a0c2886f059dfa (diff) |
fdo#59789: xlsx export of data point labels, first cut
Change-Id: I4a9d893ce7999970a559851ce2faac50b3d01b6e
Diffstat (limited to 'oox')
-rw-r--r-- | oox/inc/oox/export/chartexport.hxx | 3 | ||||
-rw-r--r-- | oox/source/export/chartexport.cxx | 81 |
2 files changed, 83 insertions, 1 deletions
diff --git a/oox/inc/oox/export/chartexport.hxx b/oox/inc/oox/export/chartexport.hxx index f801fc39968f..83b2ef196a2f 100644 --- a/oox/inc/oox/export/chartexport.hxx +++ b/oox/inc/oox/export/chartexport.hxx @@ -159,6 +159,9 @@ private: void exportDataPoints( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xSeriesProperties, sal_Int32 nSeriesLength ); + void exportDataLabels( + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xSeriesProperties, + sal_Int32 nSeriesLength ); void exportGrouping( sal_Bool isBar = sal_False ); void exportMarker(); void exportSmooth(); diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 6b53159cff0b..df2400d959c1 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -42,6 +42,7 @@ #include <com/sun/star/chart/ChartAxisLabelPosition.hpp> #include <com/sun/star/chart/ChartAxisPosition.hpp> #include <com/sun/star/chart/ChartSolidType.hpp> +#include <com/sun/star/chart/DataLabelPlacement.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/XDiagram.hpp> @@ -51,6 +52,7 @@ #include <com/sun/star/chart2/XChartTypeContainer.hpp> #include <com/sun/star/chart2/XDataSeriesContainer.hpp> #include <com/sun/star/chart2/DataPointGeometry3D.hpp> +#include <com/sun/star/chart2/DataPointLabel.hpp> #include <com/sun/star/chart2/data/XDataSource.hpp> #include <com/sun/star/chart2/data/XDataSink.hpp> #include <com/sun/star/chart2/data/XDataReceiver.hpp> @@ -1546,7 +1548,8 @@ void ChartExport::exportSeries( Reference< chart2::XChartType > xChartType, sal_ } } - // TODO: Data Labels: show data lables + // export data labels + exportDataLabels( uno::Reference< beans::XPropertySet >( aSeriesSeq[nSeriesIdx], uno::UNO_QUERY ), nSeriesLength ); // export data points exportDataPoints( uno::Reference< beans::XPropertySet >( aSeriesSeq[nSeriesIdx], uno::UNO_QUERY ), nSeriesLength ); @@ -2284,6 +2287,82 @@ void ChartExport::_exportAxis( pFS->endElement( FSNS( XML_c, nAxisType ) ); } +void ChartExport::exportDataLabels( + const uno::Reference< beans::XPropertySet > & xSeriesProperties, + sal_Int32 nSeriesLength ) +{ + // TODO: export field separators, missing flag vs. showing series name or not + uno::Reference< chart2::XDataSeries > xSeries( xSeriesProperties, uno::UNO_QUERY ); + Sequence< sal_Int32 > aDataPointSeq; + if( xSeriesProperties.is()) + { + FSHelperPtr pFS = GetFS(); + pFS->startElement( FSNS( XML_c, XML_dLbls ), + FSEND ); + sal_Int32 nElem; + for( nElem = 0; nElem < nSeriesLength; ++nElem) + { + uno::Reference< beans::XPropertySet > xPropSet; + + try + { + xPropSet = SchXMLSeriesHelper::createOldAPIDataPointPropertySet( + xSeries, nElem, getModel() ); + } + catch( const uno::Exception & rEx ) + { + (void)rEx; // avoid warning for pro build + OSL_TRACE( "Exception caught during Export of data label: %s", + rtl::OUStringToOString( rEx.Message, RTL_TEXTENCODING_ASCII_US ).getStr() ); + } + + if( xPropSet.is() ) + { + namespace cssc2 = ::com::sun::star::chart2; + cssc2::DataPointLabel aLabel; + if( GetProperty( xPropSet, S( "Label" ) ) ) + { + mAny >>= aLabel; + + namespace csscd = ::com::sun::star::chart::DataLabelPlacement; + sal_Int32 nPlacement; + const char *aPlacement = NULL; + + if( GetProperty( xPropSet, S( "LabelPlacement" ) ) ) + mAny >>= nPlacement; + + switch( nPlacement ) + { + case csscd::OUTSIDE: aPlacement = "outEnd"; break; + case csscd::INSIDE: aPlacement = "inEnd"; break; + case csscd::CENTER: aPlacement = "ctr"; break; + case csscd::NEAR_ORIGIN: aPlacement = "inBase"; break; + case csscd::TOP: aPlacement = "t"; break; + case csscd::BOTTOM: aPlacement = "b"; break; + case csscd::LEFT: aPlacement = "l"; break; + case csscd::RIGHT: aPlacement = "r"; break; + case csscd::AVOID_OVERLAP: aPlacement = "bestFit"; break; + } + + pFS->startElement( FSNS( XML_c, XML_dLbl ), FSEND); + pFS->singleElement( FSNS( XML_c, XML_idx), XML_val, I32S(nElem), FSEND); + pFS->singleElement( FSNS( XML_c, XML_dLblPos), XML_val, aPlacement, FSEND); + pFS->singleElement( FSNS( XML_c, XML_showLegendKey), XML_val, + aLabel.ShowLegendSymbol ? "1" : "0", FSEND); + pFS->singleElement( FSNS( XML_c, XML_showVal), XML_val, + aLabel.ShowNumber ? "1" : "0", FSEND); + pFS->singleElement( FSNS( XML_c, XML_showCatName), XML_val, + aLabel.ShowCategoryName ? "1" : "0", FSEND); + pFS->singleElement( FSNS( XML_c, XML_showPercent), XML_val, + aLabel.ShowNumberInPercent ? "1" : "0", FSEND); + pFS->endElement( FSNS( XML_c, XML_dLbl )); + } + } + } + pFS->endElement( FSNS( XML_c, XML_dLbls ) ); + } +} + void ChartExport::exportDataPoints( const uno::Reference< beans::XPropertySet > & xSeriesProperties, sal_Int32 nSeriesLength ) |