summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorKatarina Behrens <bubli@bubli.org>2013-02-13 15:44:34 +0100
committerThorsten Behrens <tbehrens@suse.com>2013-02-13 18:21:55 +0100
commit32edd34a2056f0eba1a44fd01743908b1a4729b5 (patch)
treebf6dc781234796df8148cccc39ea0f94fb0ca176 /oox
parent30862ca42c6b548a2dce99c0f2a0c2886f059dfa (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.hxx3
-rw-r--r--oox/source/export/chartexport.cxx81
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 )