tdf#125337 Chart DOCX Import: fix missing empty data series columns
Create an empty column for a data series with NAN values, ie. where
only "ptCount" was defined without explicit data. Also data series
appear in the right order.
Change-Id: I4eac94c2b9f34c84c4c19e4717cafbd440b20087
Reviewed-on: https://gerrit.libreoffice.org/77026
Reviewed-by: László Németh <nemeth@numbertext.org>
Tested-by: László Németh <nemeth@numbertext.org>
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx
index 710d15e..90a1bd8 100644
--- a/chart2/qa/extras/chart2import.cxx
+++ b/chart2/qa/extras/chart2import.cxx
@@ -46,6 +46,7 @@ public:
void testODTChartSeries();
void testDOCChartSeries();
void testDOCXChartSeries();
void testDOCXChartEmptySeries();
void testDOCXChartValuesSize();
void testPPTXChartSeries();
void testPPTXSparseChartSeries();
@@ -146,6 +147,7 @@ public:
CPPUNIT_TEST(testODTChartSeries);
CPPUNIT_TEST(testDOCChartSeries);
CPPUNIT_TEST(testDOCXChartSeries);
CPPUNIT_TEST(testDOCXChartEmptySeries);
CPPUNIT_TEST(testDOCXChartValuesSize);
CPPUNIT_TEST(testPPTChartSeries);
CPPUNIT_TEST(testPPTXChartSeries);
@@ -469,6 +471,32 @@ void Chart2ImportTest::testDOCXChartSeries()
CPPUNIT_ASSERT_EQUAL(OUString("Series 3"), aLabels[2][0].get<OUString>());
}
void Chart2ImportTest::testDOCXChartEmptySeries()
{
load("/chart2/qa/extras/data/docx/", "tdf125337.docx");
Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
CPPUNIT_ASSERT(xChartDoc.is());
Reference<chart2::XChartType> xCT = getChartTypeFromDoc(xChartDoc, 0);
CPPUNIT_ASSERT(xCT.is());
std::vector<uno::Sequence<uno::Any> > aLabels = getDataSeriesLabelsFromChartType(xCT);
CPPUNIT_ASSERT_EQUAL(size_t(3), aLabels.size());
CPPUNIT_ASSERT_EQUAL(OUString("1. dataseries"), aLabels[0][0].get<OUString>());
CPPUNIT_ASSERT_EQUAL(OUString("2. dataseries"), aLabels[1][0].get<OUString>());
CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), aLabels[2][0].get<OUString>());
//test chart series sparse data for docx
std::vector<std::vector<double> > aValues = getDataSeriesYValuesFromChartType(xCT);
CPPUNIT_ASSERT_EQUAL(size_t(3), aValues.size());
//test the second series values
CPPUNIT_ASSERT_EQUAL(2.4, aValues[1][0]);
CPPUNIT_ASSERT_EQUAL(4.4, aValues[1][1]);
//test the third series (empty) values
CPPUNIT_ASSERT(rtl::math::isNan(aValues[2][0]));
CPPUNIT_ASSERT(rtl::math::isNan(aValues[2][1]));
}
void Chart2ImportTest::testDOCXChartValuesSize()
{
load( "/chart2/qa/extras/data/docx/", "bubblechart.docx" );
diff --git a/chart2/qa/extras/data/docx/tdf125337.docx b/chart2/qa/extras/data/docx/tdf125337.docx
new file mode 100644
index 0000000..811f12d
--- /dev/null
+++ b/chart2/qa/extras/data/docx/tdf125337.docx
Binary files differ
diff --git a/oox/source/drawingml/chart/chartconverter.cxx b/oox/source/drawingml/chart/chartconverter.cxx
index 538f995..739092d 100644
--- a/oox/source/drawingml/chart/chartconverter.cxx
+++ b/oox/source/drawingml/chart/chartconverter.cxx
@@ -124,7 +124,7 @@ Reference< XDataSequence > ChartConverter::createDataSequence(
if( rxDataProvider.is() )
{
OUString aRangeRep;
if( !rDataSeq.maData.empty() ) try
if( !rDataSeq.maData.empty() || (rRole == "values-y" && rDataSeq.mnPointCount > 0) ) try
{
// create a single-row array from constant source data
// (multiple levels in the case of complex categories)