summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTünde Tóth <toth.tunde@nisz.hu>2020-08-14 13:45:38 +0200
committerLászló Németh <nemeth@numbertext.org>2020-08-19 10:31:51 +0200
commita8950d08a33e7aded31d4591c98a03d1edf8c5a4 (patch)
tree7b8d50403c2207c25e6dd5ff75e1f25297389ecf
parent6724040e61c1efbee0b1456e3480b1e7b0827732 (diff)
tdf#123647 Chart XLSX export: fix missing empty chart
Save empty chart as empty bar chart, because a chart without chart type is invalid. Change-Id: Ieb9cc4300070b5280565fe814ba0343640dfff0a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100844 Tested-by: Jenkins Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
-rw-r--r--chart2/qa/extras/chart2export.cxx10
-rw-r--r--chart2/qa/extras/data/xlsx/empty_chart.xlsxbin0 -> 13370 bytes
-rw-r--r--oox/source/export/chartexport.cxx5
-rw-r--r--sc/source/filter/xcl97/xcl97rec.cxx10
4 files changed, 21 insertions, 4 deletions
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index 754768880054..948aaec6700a 100644
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -174,6 +174,7 @@ public:
void testTdf132594();
void testTdf134255();
void testTdf134977();
+ void testTdf123647();
CPPUNIT_TEST_SUITE(Chart2ExportTest);
CPPUNIT_TEST(testErrorBarXLSX);
@@ -311,6 +312,7 @@ public:
CPPUNIT_TEST(testTdf132594);
CPPUNIT_TEST(testTdf134255);
CPPUNIT_TEST(testTdf134977);
+ CPPUNIT_TEST(testTdf123647);
CPPUNIT_TEST_SUITE_END();
@@ -2861,6 +2863,14 @@ void Chart2ExportTest::testTdf134977()
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:tx/c:rich/a:p/a:r/a:rPr", "sz", "900");
}
+void Chart2ExportTest::testTdf123647()
+{
+ load("/chart2/qa/extras/data/xlsx/", "empty_chart.xlsx");
+ xmlDocUniquePtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart", 1);
+}
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/chart2/qa/extras/data/xlsx/empty_chart.xlsx b/chart2/qa/extras/data/xlsx/empty_chart.xlsx
new file mode 100644
index 000000000000..449902146af6
--- /dev/null
+++ b/chart2/qa/extras/data/xlsx/empty_chart.xlsx
Binary files differ
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index ab8458d44b04..5ea054d83ca0 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1380,6 +1380,11 @@ void ChartExport::exportPlotArea( const Reference< css::chart::XChartDocument >&
// chart type
const Sequence< Reference< chart2::XCoordinateSystem > >
aCooSysSeq( xBCooSysCnt->getCoordinateSystems());
+
+ // tdf#123647 Save empty chart as empty bar chart.
+ if (!aCooSysSeq.hasElements())
+ exportBarChart(nullptr);
+
for( const auto& rCS : aCooSysSeq )
{
Reference< chart2::XChartTypeContainer > xCTCnt( rCS, uno::UNO_QUERY );
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 213dfe77d4ae..0f9ba1288d33 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -202,9 +202,11 @@ bool IsValidObject( const XclObj& rObj )
if (!xCooSysContainer.is())
return false;
- const uno::Sequence<uno::Reference<chart2::XCoordinateSystem> > xCooSysSeq = xCooSysContainer->getCoordinateSystems();
- if (!xCooSysSeq.hasElements())
- return false;
+ const uno::Sequence<uno::Reference<chart2::XCoordinateSystem>> xCooSysSeq = xCooSysContainer->getCoordinateSystems();
+
+ // tdf#123647 Save empty charts too.
+ // if (!xCooSysSeq.hasElements())
+ // return false;
for (const auto& rCooSys : xCooSysSeq)
{
@@ -212,7 +214,7 @@ bool IsValidObject( const XclObj& rObj )
if (!xChartTypeCont.is())
return false;
- uno::Sequence<uno::Reference<chart2::XChartType> > xChartTypeSeq = xChartTypeCont->getChartTypes();
+ uno::Sequence<uno::Reference<chart2::XChartType>> xChartTypeSeq = xChartTypeCont->getChartTypes();
if (!xChartTypeSeq.hasElements())
// No chart type. Not good.
return false;