[Libreoffice-commits] core.git: chart2/qa oox/source
Balazs Varga (via logerrit)
logerrit at kemper.freedesktop.org
Tue Apr 2 06:34:33 UTC 2019
chart2/qa/extras/chart2export.cxx | 18 ++++++++++++++++++
chart2/qa/extras/data/ods/secondary_axis.ods |binary
oox/source/export/chartexport.cxx | 15 +++++++++++++++
3 files changed, 33 insertions(+)
New commits:
commit ad363fd42e439b43c57b6541988234fbaf1ddb30
Author: Balazs Varga <balazs.varga991 at gmail.com>
AuthorDate: Mon Apr 1 13:57:33 2019 +0200
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Tue Apr 2 08:34:08 2019 +0200
tdf#124463 XLSX export: fix splitDataSeriesByAxis
splitDataSeriesByAxis couldn't split series correctly into two
sequences, because it put all series into the first created sequence,
except the first series of the newer sequence.
Other improvement: first sequence of the return vector always
contains the series attached to the primary axis.
Change-Id: I6e107aa990f9a1a1db49cae2a4f3c9d8a35fb54c
Reviewed-on: https://gerrit.libreoffice.org/70059
Reviewed-by: László Németh <nemeth at numbertext.org>
Tested-by: László Németh <nemeth at numbertext.org>
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index f4d8f5e981a9..3d537cf2ab90 100644
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -112,6 +112,7 @@ public:
void testPlotVisOnlyXLSX();
void testBarChartVaryColorsXLSX();
void testMultipleAxisXLSX();
+ void testSecondaryAxisXLSX();
void testAxisTitleRotationXLSX();
void testAxisCrossBetweenXSLX();
void testPieChartDataPointExplosionXLSX();
@@ -204,6 +205,7 @@ public:
CPPUNIT_TEST(testPlotVisOnlyXLSX);
CPPUNIT_TEST(testBarChartVaryColorsXLSX);
CPPUNIT_TEST(testMultipleAxisXLSX);
+ CPPUNIT_TEST(testSecondaryAxisXLSX);
CPPUNIT_TEST(testAxisTitleRotationXLSX);
CPPUNIT_TEST(testAxisCrossBetweenXSLX);
CPPUNIT_TEST(testPieChartDataPointExplosionXLSX);
@@ -1742,6 +1744,22 @@ void Chart2ExportTest::testMultipleAxisXLSX()
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:axPos[@val='r']", 1);
}
+void Chart2ExportTest::testSecondaryAxisXLSX()
+{
+ load("/chart2/qa/extras/data/ods/", "secondary_axis.ods");
+ xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart", 2);
+ // test there is just those series in the first <lineChart> tag which are attached to the primary axis
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser", 2);
+ assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", "b");
+ assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[2]/c:tx/c:strRef/c:strCache/c:pt/c:v", "c");
+ // test there is just those series in the second <lineChart> tag which are attached to the secondary axis
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser", 1);
+ assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", "a");
+}
+
void Chart2ExportTest::testAxisTitleRotationXLSX()
{
load("/chart2/qa/extras/data/xlsx/", "axis_title_rotation.xlsx");
diff --git a/chart2/qa/extras/data/ods/secondary_axis.ods b/chart2/qa/extras/data/ods/secondary_axis.ods
new file mode 100755
index 000000000000..3f8f269c0f00
Binary files /dev/null and b/chart2/qa/extras/data/ods/secondary_axis.ods differ
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 47c30b1ba569..062636c91d62 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1592,6 +1592,7 @@ std::vector<Sequence<Reference<chart2::XDataSeries> > > splitDataSeriesByAxis(co
Reference< chart2::XDataSeriesContainer > xDSCnt( xChartType, uno::UNO_QUERY );
if(xDSCnt.is())
{
+ sal_Int32 nAxisIndexOfFirstSeries = -1;
Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xDSCnt->getDataSeries());
for (sal_Int32 nIndex = 0, nEnd = aSeriesSeq.getLength(); nIndex < nEnd; ++nIndex)
{
@@ -1604,6 +1605,10 @@ std::vector<Sequence<Reference<chart2::XDataSeries> > > splitDataSeriesByAxis(co
uno::Any aAny = xPropSet->getPropertyValue("AttachedAxisIndex");
aAny >>= nAxisIndex;
size_t nVectorPos = 0;
+ if (nAxisIndexOfFirstSeries == -1)
+ {
+ nAxisIndexOfFirstSeries = nAxisIndex;
+ }
auto it = aMapAxisToIndex.find(nAxisIndex);
if (it == aMapAxisToIndex.end())
@@ -1612,12 +1617,22 @@ std::vector<Sequence<Reference<chart2::XDataSeries> > > splitDataSeriesByAxis(co
nVectorPos = aSplitSeries.size() - 1;
aMapAxisToIndex.insert(std::pair<sal_Int32, size_t>(nAxisIndex, nVectorPos));
}
+ else
+ {
+ nVectorPos = it->second;
+ }
uno::Sequence<Reference<chart2::XDataSeries> >& rAxisSeriesSeq = aSplitSeries[nVectorPos];
sal_Int32 nLength = rAxisSeriesSeq.getLength();
rAxisSeriesSeq.realloc(nLength + 1);
rAxisSeriesSeq[nLength] = xSeries;
}
+ // if the first series attached to secondary axis, then export those series first, which are attached to primary axis
+ // also the MS Office export every time in this order
+ if ( aSplitSeries.size() > 1 && nAxisIndexOfFirstSeries == 1 )
+ {
+ std::swap( aSplitSeries[0], aSplitSeries[1] );
+ }
}
return aSplitSeries;
More information about the Libreoffice-commits
mailing list