summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBalazs Varga <balazs.varga991@gmail.com>2018-08-22 11:15:45 +0200
committerAndras Timar <andras.timar@collabora.com>2018-09-12 08:24:24 +0200
commitf8d3314f198b70c64a4f45e701fa38151207950f (patch)
tree338430f75f0fe8abdd8c53ceb17f98b36ae4a4c9
parentc53039f58b4886c7ff4fb76a8e6f41a356e38083 (diff)
tdf#94502 Fix overlap export of Stacked Bar Chart to *.xlsx
Export the Overlap value with 100% for stacked charts, because the default overlap value of the Bar/Column chart is 0% and LibreOffice do nothing with the overlap value in Stacked Chart case, unlike the MS Office. Change-Id: If4e20b88c2b1180f68a8d2b610c407d674a8498b Reviewed-on: https://gerrit.libreoffice.org/59448 Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Tested-by: Jenkins (cherry picked from commit 17c2b0af97f73b9103be982b15d7111b3980e027)
-rwxr-xr-xchart2/qa/extras/chart2export.cxx23
-rwxr-xr-xchart2/qa/extras/data/xlsx/testDataseriesOverlapStackedChart.xlsxbin0 -> 11007 bytes
-rw-r--r--oox/source/export/chartexport.cxx17
3 files changed, 39 insertions, 1 deletions
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index f8c783d46574..cb1ae992a1dd 100755
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -104,6 +104,7 @@ public:
void testChartTitlePropertiesGradientFillXLSX();
void testChartTitlePropertiesBitmapFillXLSX();
void testBarChartDataPointPropXLSX();
+ void testDataseriesOverlapStackedChartXLSX();
void testAxisCharacterPropertiesXLSX();
void testTitleCharacterPropertiesXLSX();
void testPlotVisOnlyXLSX();
@@ -185,6 +186,7 @@ public:
CPPUNIT_TEST(testChartTitlePropertiesGradientFillXLSX);
CPPUNIT_TEST(testChartTitlePropertiesBitmapFillXLSX);
CPPUNIT_TEST(testBarChartDataPointPropXLSX);
+ CPPUNIT_TEST(testDataseriesOverlapStackedChartXLSX);
CPPUNIT_TEST(testAxisCharacterPropertiesXLSX);
CPPUNIT_TEST(testTitleCharacterPropertiesXLSX);
CPPUNIT_TEST(testPlotVisOnlyXLSX);
@@ -1608,6 +1610,27 @@ void Chart2ExportTest::testBarChartDataPointPropXLSX()
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "70ad47");
}
+void Chart2ExportTest::testDataseriesOverlapStackedChartXLSX()
+{
+ load("/chart2/qa/extras/data/xlsx/", "testDataseriesOverlapStackedChart.xlsx");
+
+ // test the overlap value of a simple Stacked Column Chart
+ uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
+ checkSheetForGapWidthAndOverlap(xChartDoc, 100, 0);
+
+ // test the overlap value of a Percent Stacked Bar Chart
+ xChartDoc = getChartDocFromSheet( 1, mxComponent );
+ checkSheetForGapWidthAndOverlap(xChartDoc, 100, 35);
+
+ reload("Calc Office Open XML");
+
+ xChartDoc = getChartDocFromSheet( 0, mxComponent );
+ checkSheetForGapWidthAndOverlap(xChartDoc, 100, 100);
+
+ xChartDoc = getChartDocFromSheet( 1, mxComponent );
+ checkSheetForGapWidthAndOverlap(xChartDoc, 100, 100);
+}
+
void Chart2ExportTest::testAxisCharacterPropertiesXLSX()
{
load("/chart2/qa/extras/data/xlsx/", "axis_character_properties.xlsx");
diff --git a/chart2/qa/extras/data/xlsx/testDataseriesOverlapStackedChart.xlsx b/chart2/qa/extras/data/xlsx/testDataseriesOverlapStackedChart.xlsx
new file mode 100755
index 000000000000..ba1c526b41ca
--- /dev/null
+++ b/chart2/qa/extras/data/xlsx/testDataseriesOverlapStackedChart.xlsx
Binary files differ
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index e7dbcf90d4c2..a6bd3b4c0618 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1471,9 +1471,24 @@ void ChartExport::exportBarChart( const Reference< chart2::XChartType >& xChartT
if( aBarPositionSequence.getLength() )
{
sal_Int32 nOverlap = aBarPositionSequence[0];
- pFS->singleElement( FSNS( XML_c, XML_overlap ),
+ // Stacked/Percent Bar/Column chart Overlap-workaround
+ // Export the Overlap value with 100% for stacked charts,
+ // because the default overlap value of the Bar/Column chart is 0% and
+ // LibreOffice do nothing with the overlap value in Stacked charts case,
+ // unlike the MS Office, which is interpreted differently.
+ if( ( mbStacked || mbPercent ) && nOverlap != 100 )
+ {
+ nOverlap = 100;
+ pFS->singleElement( FSNS( XML_c, XML_overlap ),
+ XML_val, I32S( nOverlap ),
+ FSEND );
+ }
+ else // Normal bar chart
+ {
+ pFS->singleElement( FSNS( XML_c, XML_overlap ),
XML_val, I32S( nOverlap ),
FSEND );
+ }
}
}