From 996bf7400802ca79f99d590dea2f5aa8762977b7 Mon Sep 17 00:00:00 2001 From: Kurt Nordback Date: Sat, 31 Jan 2026 06:31:54 -0700 Subject: [PATCH] tdf#165742 Step 5.5: Fixes to chartex axis import/export MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improvements and fixes for chartex axes, plus a rudimentary round-trip test. Change-Id: I1d34aae9a139ea970f3d06315d32aefffd03598a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198453 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- chart2/qa/extras/chart2export2.cxx | 11 ++++ chart2/qa/extras/data/xlsx/waterfall2.xlsx | Bin 0 -> 13666 bytes include/oox/export/chartexport.hxx | 2 +- .../drawingml/chart/plotareacontext.cxx | 7 +++ oox/source/drawingml/chart/titlecontext.cxx | 6 ++- oox/source/export/chartexport.cxx | 47 ++++++++++-------- 6 files changed, 49 insertions(+), 24 deletions(-) create mode 100644 chart2/qa/extras/data/xlsx/waterfall2.xlsx diff --git a/chart2/qa/extras/chart2export2.cxx b/chart2/qa/extras/chart2export2.cxx index 25a51dd7381e..32766ba9b161 100644 --- a/chart2/qa/extras/chart2export2.cxx +++ b/chart2/qa/extras/chart2export2.cxx @@ -276,6 +276,17 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testChartexPPTX) "layoutId", u"funnel"); } +CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testChartexAxes) +{ + loadFromFile(u"xlsx/waterfall2.xlsx"); + save(TestFilter::XLSX); + xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chartEx1.xml"_ustr); + CPPUNIT_ASSERT(pXmlDoc); + + // Should be two axes + assertXPath(pXmlDoc, "/cx:chartSpace/cx:chart/cx:plotArea/cx:axis", 2); +} + CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testAxisTitleRotationXLSX) { loadFromFile(u"xlsx/axis_title_rotation.xlsx"); diff --git a/chart2/qa/extras/data/xlsx/waterfall2.xlsx b/chart2/qa/extras/data/xlsx/waterfall2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..573b0b69da488d46e750c413da1f6f429e7fcfad GIT binary patch literal 13666 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 xMinorGrid, sal_Int32 nAxisType, const AxisIdPair& rAxisIdPair); - void createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes); + void createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes, bool bIsChartex); void exportView3D(); bool isDeep3dChart(); diff --git a/oox/source/drawingml/chart/plotareacontext.cxx b/oox/source/drawingml/chart/plotareacontext.cxx index c3c3fc6af82f..95b20c8f77d9 100644 --- a/oox/source/drawingml/chart/plotareacontext.cxx +++ b/oox/source/drawingml/chart/plotareacontext.cxx @@ -175,6 +175,13 @@ ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, [[maybe_ if (rAttribs.hasAttribute(XML_id)) { sal_Int32 nId = rAttribs.getInteger(XML_id, -1); // TODO: also handle attribute "hidden" + + // Add the id to the axis id list in the (fictitious) + // type group + std::shared_ptr aTGM = + mrModel.maTypeGroups.get(mrModel.maTypeGroups.size() - 1); + aTGM->maAxisIds.push_back(nId); + return new CxAxisContext(*this, mrModel.maAxes.create(nElement, false), nId); } else { return nullptr; diff --git a/oox/source/drawingml/chart/titlecontext.cxx b/oox/source/drawingml/chart/titlecontext.cxx index 1470aa1b44e7..d9375536f5df 100644 --- a/oox/source/drawingml/chart/titlecontext.cxx +++ b/oox/source/drawingml/chart/titlecontext.cxx @@ -46,7 +46,9 @@ TextContext::~TextContext() ContextHandlerRef TextContext::onCreateContext( sal_Int32 nElement, const AttributeList& ) { // this context handler is used for and embedded elements - if( isCurrentElement( C_TOKEN( tx ) ) || isCurrentElement(CX_TOKEN(tx)) ) switch( nElement ) + if( isCurrentElement( C_TOKEN( tx ) ) || + isCurrentElement(CX_TOKEN(tx)) || + isCurrentElement(CX_TOKEN(txData)) ) switch( nElement ) { case C_TOKEN( rich ): case CX_TOKEN( rich ): @@ -71,7 +73,7 @@ ContextHandlerRef TextContext::onCreateContext( sal_Int32 nElement, const Attrib void TextContext::onCharacters( const OUString& rChars ) { - if( isCurrentElement( C_TOKEN( v ) ) ) + if( isCurrentElement( C_TOKEN( v ) ) || isCurrentElement( CX_TOKEN( v ) )) { // Static text is stored as a single string formula token for Excel document. mrModel.mxDataSeq.create().maFormula = "\"" + rChars + "\""; diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 7fb109ccdd7a..bf9486950c3d 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -2560,7 +2560,7 @@ void ChartExport::exportPlotArea(const Reference< css::chart::XChartDocument >& pFS->singleElement(FSNS(XML_c, XML_barDir), XML_val, "col"); pFS->singleElement(FSNS(XML_c, XML_grouping), XML_val, "clustered"); pFS->singleElement(FSNS(XML_c, XML_varyColors), XML_val, "0"); - createAxes(true, false); + createAxes(true, false, false); pFS->endElement(FSNS(XML_c, XML_barChart)); } @@ -3112,7 +3112,7 @@ void ChartExport::exportAreaChart( const Reference< chart2::XChartType >& xChart if (splitDataSeries.hasElements()) exportSeries_chart(xChartType, splitDataSeries, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); //exportAxesId(bPrimaryAxes); pFS->endElement(FSNS(XML_c, nTypeId)); @@ -3216,7 +3216,7 @@ void ChartExport::exportBarChart(const Reference< chart2::XChartType >& xChartTy } } - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); pFS->endElement(FSNS(XML_c, nTypeId)); } @@ -3241,7 +3241,7 @@ void ChartExport::exportBubbleChart( const Reference< chart2::XChartType >& xCha if (splitDataSeries.hasElements()) exportSeries_chart(xChartType, splitDataSeries, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); pFS->endElement(FSNS(XML_c, XML_bubbleChart)); } @@ -3259,6 +3259,8 @@ void ChartExport::exportChartex( const Reference< chart2::XChartType >& xChartTy if (!splitDataSeries.hasElements()) continue; + createAxes(true, false, true); + //exportVaryColors(xChartType); exportSeries_chartex(xChartType, splitDataSeries, sTypeName); @@ -3396,7 +3398,7 @@ void ChartExport::exportLineChart( const Reference< chart2::XChartType >& xChart pFS->singleElement(FSNS(XML_c, XML_marker), XML_val, marker); } - createAxes(bPrimaryAxes, true); + createAxes(bPrimaryAxes, true, false); pFS->endElement( FSNS( XML_c, nTypeId ) ); } @@ -3441,7 +3443,7 @@ void ChartExport::exportRadarChart( const Reference< chart2::XChartType >& xChar exportVaryColors(xChartType); bool bPrimaryAxes = true; exportAllSeries(xChartType, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); pFS->endElement( FSNS( XML_c, XML_radarChart ) ); } @@ -3471,7 +3473,7 @@ void ChartExport::exportScatterChartSeries( const Reference< chart2::XChartType bool bPrimaryAxes = true; if (pSeries) exportSeries_chart(xChartType, *pSeries, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); //exportAxesId(bPrimaryAxes); pFS->endElement( FSNS( XML_c, XML_scatterChart ) ); @@ -3520,7 +3522,7 @@ void ChartExport::exportStockChart( const Reference< chart2::XChartType >& xChar exportUpDownBars(xChartType); } - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); pFS->endElement(FSNS(XML_c, XML_stockChart)); } @@ -3595,7 +3597,7 @@ void ChartExport::exportSurfaceChart( const Reference< chart2::XChartType >& xCh exportVaryColors(xChartType); bool bPrimaryAxes = true; exportAllSeries(xChartType, bPrimaryAxes); - createAxes(bPrimaryAxes, false); + createAxes(bPrimaryAxes, false, false); pFS->endElement( FSNS( XML_c, nTypeId ) ); } @@ -5584,7 +5586,7 @@ void ChartExport::exportDataPoints( } // Generalized axis output -void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes) +void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes, bool bIsChartex) { sal_Int32 nAxisIdx, nAxisIdy; bool bPrimaryAxisExists = false; @@ -5610,19 +5612,22 @@ void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes) maAxes.emplace_back( eXAxis, nAxisIdx, nAxisIdy ); maAxes.emplace_back( eYAxis, nAxisIdy, nAxisIdx ); } - // Export IDs - FSHelperPtr pFS = GetFS(); - pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdx)); - pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdy)); - if (mbHasZAxis) - { - sal_Int32 nAxisIdz = 0; - if( isDeep3dChart() ) + + if (!bIsChartex) { + // Export IDs + FSHelperPtr pFS = GetFS(); + pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdx)); + pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdy)); + if (mbHasZAxis) { - nAxisIdz = lcl_generateRandomValue(); - maAxes.emplace_back( AXIS_PRIMARY_Z, nAxisIdz, nAxisIdy ); + sal_Int32 nAxisIdz = 0; + if( isDeep3dChart() ) + { + nAxisIdz = lcl_generateRandomValue(); + maAxes.emplace_back( AXIS_PRIMARY_Z, nAxisIdz, nAxisIdy ); + } + pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdz)); } - pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, OString::number(nAxisIdz)); } }