Kaydet (Commit) 32edd34a authored tarafından Katarina Behrens's avatar Katarina Behrens Kaydeden (comit) Thorsten Behrens

fdo#59789: xlsx export of data point labels, first cut

Change-Id: I4a9d893ce7999970a559851ce2faac50b3d01b6e
üst 30862ca4
......@@ -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();
......
......@@ -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 )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment