chart2/qa/extras/chart2export2.cxx              |   16 
 dev/null                                        |binary
 include/oox/core/xmlfilterbase.hxx              |    7 
 include/oox/export/chartexport.hxx              |   16 
 include/oox/export/drawingml.hxx                |    3 
 include/oox/token/relationship.hxx              |    2 
 oox/inc/drawingml/chart/typegroupcontext.hxx    |    3 
 oox/source/core/xmlfilterbase.cxx               |    5 
 oox/source/drawingml/chart/plotareacontext.cxx  |   41 +
 oox/source/drawingml/chart/seriescontext.cxx    |   69 --
 oox/source/drawingml/chart/titlecontext.cxx     |    7 
 oox/source/drawingml/chart/typegroupcontext.cxx |   56 -
 oox/source/export/chartexport.cxx               |  785 ++++++------------------
 oox/source/export/drawingml.cxx                 |    7 
 oox/source/token/namespaces-strict.txt          |    4 
 oox/source/token/namespaces.txt                 |    6 
 oox/source/token/relationship.inc               |    2 
 oox/source/token/tokens.txt                     |   39 -
 sc/source/filter/excel/excdoc.cxx               |    9 
 sc/source/filter/excel/xestream.cxx             |    7 
 sc/source/filter/inc/xestream.hxx               |    4 
 test/source/xmltesttools.cxx                    |    2 
 22 files changed, 297 insertions(+), 793 deletions(-)

New commits:
commit ca984b69e2dc66e28b982f8a5bacf41e82d3707e
Author:     Kurt Nordback <[email protected]>
AuthorDate: Thu Jan 22 10:52:37 2026 -0700
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Mon Jan 26 11:57:38 2026 +0100

    Revert "tdf#165742 Step 4.3: Establish a narrow export path for chartex"
    
    This reverts commit bbccf2291e3758d0dd249eb26bd6c8231cb8f7cd.
    
    Change-Id: I68a6b5343ac1f656db1e7a3838f088d77ed6026b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197903
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Tomaž Vajngerl <[email protected]>

diff --git a/include/oox/core/xmlfilterbase.hxx 
b/include/oox/core/xmlfilterbase.hxx
index e30146e30227..ee3fecc41627 100644
--- a/include/oox/core/xmlfilterbase.hxx
+++ b/include/oox/core/xmlfilterbase.hxx
@@ -207,17 +207,12 @@ public:
             The media type string, used in [Content_Types].xml stream in base
             storage.
 
-        @param bNoHeader
-            If true, do not include a header line in the output. If false,
-            potentially include a header line based on the media type string.
-
         @return newly created serializer helper.
      */
     ::sax_fastparser::FSHelperPtr
                         openFragmentStreamWithSerializer(
                             const OUString& rStreamName,
-                            const OUString& rMediaType,
-                            bool bNoHeader = false);
+                            const OUString& rMediaType );
 
     /** Returns new unique ID for exported document.
 
diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
index aa08f22c5ee7..1f62c648db0d 100644
--- a/include/oox/export/drawingml.hxx
+++ b/include/oox/export/drawingml.hxx
@@ -535,8 +535,7 @@ public:
                                         const css::uno::Reference< 
css::io::XOutputStream >& xParentRelation,
                                         const OUString& sContentType,
                                         const OUString& sRelationshipType,
-                                        OUString* pRelationshipId,
-                                        bool bNoHeader = false); // Don't 
write a <?xml... header line
+                                        OUString* pRelationshipId );
 
     OOX_DLLPUBLIC std::shared_ptr<GraphicExport> createGraphicExport();
 };
diff --git a/include/oox/token/relationship.hxx 
b/include/oox/token/relationship.hxx
index 56640076f854..2879895c3b92 100644
--- a/include/oox/token/relationship.hxx
+++ b/include/oox/token/relationship.hxx
@@ -20,9 +20,7 @@ enum class Relationship
 {
     ACTIVEXCONTROLBINARY,
     CHART,
-    CHARTCOLORSTYLE, // for chartex
     CHARTEX,
-    CHARTSTYLE, // for chartex
     CHARTUSERSHAPES,
     COMMENTS,
     COMMENTAUTHORS,
diff --git a/oox/inc/drawingml/chart/typegroupcontext.hxx 
b/oox/inc/drawingml/chart/typegroupcontext.hxx
index c64f18d74c72..07b45d5c50bd 100644
--- a/oox/inc/drawingml/chart/typegroupcontext.hxx
+++ b/oox/inc/drawingml/chart/typegroupcontext.hxx
@@ -162,9 +162,6 @@ public:
     explicit            ChartexTypeGroupContext( 
::oox::core::ContextHandler2Helper& rParent, TypeGroupModel& rModel );
     virtual             ~ChartexTypeGroupContext() override;
 
-    // Explicitly create a new series
-    void CreateSeries();
-
     virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 
nElement, const AttributeList& rAttribs ) override;
 };
 
diff --git a/oox/source/core/xmlfilterbase.cxx 
b/oox/source/core/xmlfilterbase.cxx
index 82323fe029f6..70ab8fd548e5 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -513,10 +513,9 @@ Reference< XOutputStream > 
XmlFilterBase::openFragmentStream( const OUString& rS
     return xOutputStream;
 }
 
-FSHelperPtr XmlFilterBase::openFragmentStreamWithSerializer(
-        const OUString& rStreamName, const OUString& rMediaType, bool 
bNoHeader /* = false */)
+FSHelperPtr XmlFilterBase::openFragmentStreamWithSerializer( const OUString& 
rStreamName, const OUString& rMediaType )
 {
-    const bool bWriteHeader = !bNoHeader && (rMediaType.indexOf( "vml" ) < 0 
|| rMediaType.indexOf( "+xml" ) >= 0);
+    const bool bWriteHeader = rMediaType.indexOf( "vml" ) < 0 || 
rMediaType.indexOf( "+xml" ) >= 0;
     return std::make_shared<FastSerializerHelper>( openFragmentStream( 
rStreamName, rMediaType ), bWriteHeader );
 }
 
diff --git a/oox/source/drawingml/chart/seriescontext.cxx 
b/oox/source/drawingml/chart/seriescontext.cxx
index 02fb62a96c6e..867ba684fd2d 100644
--- a/oox/source/drawingml/chart/seriescontext.cxx
+++ b/oox/source/drawingml/chart/seriescontext.cxx
@@ -49,7 +49,6 @@ ContextHandlerRef lclDataLabelSharedCreateContext( 
ContextHandler2& rContext,
             orModel.monLabelPos = rAttribs.getToken( XML_val, 
XML_TOKEN_INVALID );
             return nullptr;
         case C_TOKEN( numFmt ):
-        case CX_TOKEN( numFmt ):
             orModel.maNumberFormat.setAttributes( rAttribs );
             return nullptr;
         case C_TOKEN( showBubbleSize ):
@@ -71,25 +70,19 @@ ContextHandlerRef lclDataLabelSharedCreateContext( 
ContextHandler2& rContext,
             orModel.mobShowVal = rAttribs.getBool( XML_val );
             return nullptr;
         case C_TOKEN( separator ):
-        case CX_TOKEN( separator ):
             // collect separator text in onCharacters()
             return &rContext;
         case C_TOKEN( spPr ):
-        case CX_TOKEN( spPr ):
             return new ShapePropertiesContext( rContext, 
orModel.mxShapeProp.create() );
         case C_TOKEN( txPr ):
-        case CX_TOKEN( txPr ):
             return new TextBodyContext( rContext, orModel.mxTextProp.create() 
);
-        case CX_TOKEN( visibility ):
-            return nullptr; // TODO
     }
     return nullptr;
 }
 
 void lclDataLabelSharedCharacters( ContextHandler2 const & rContext, const 
OUString& rChars, DataLabelModelBase& orModel )
 {
-    if( rContext.isCurrentElement( C_TOKEN( separator ) ) ||
-            rContext.isCurrentElement( CX_TOKEN( separator ) ) )
+    if( rContext.isCurrentElement( C_TOKEN( separator ) ) )
         orModel.moaSeparator = rChars;
 }
 
@@ -139,7 +132,6 @@ ContextHandlerRef DataLabelContext::onCreateContext( 
sal_Int32 nElement, const A
                 else if (nElement == C15_TOKEN(layout))
                     return new LayoutContext(*this, 
mrModel.mxLayout.getOrCreate());
             break;
-            // Not sure how to handle <cx:extLst> and <cx:ext>. TODO
         }
     }
     bool bMSO2007 = getFilter().isMSO2007Document();
diff --git a/oox/source/drawingml/chart/titlecontext.cxx 
b/oox/source/drawingml/chart/titlecontext.cxx
index 77e56ac36ada..04a4ea7069a3 100644
--- a/oox/source/drawingml/chart/titlecontext.cxx
+++ b/oox/source/drawingml/chart/titlecontext.cxx
@@ -50,7 +50,6 @@ ContextHandlerRef TextContext::onCreateContext( sal_Int32 
nElement, const Attrib
     if( isCurrentElement( C_TOKEN( tx ) ) ) switch( nElement )
     {
         case C_TOKEN( rich ):
-        case CX_TOKEN( rich ):
             return new TextBodyContext( *this, mrModel.mxTextBody.create() );
 
         case C_TOKEN( strRef ):
@@ -58,14 +57,8 @@ ContextHandlerRef TextContext::onCreateContext( sal_Int32 
nElement, const Attrib
             return new StringSequenceContext( *this, 
mrModel.mxDataSeq.create() );
 
         case C_TOKEN( v ):
-        case CX_TOKEN( v ):
             OSL_ENSURE( !mrModel.mxDataSeq, "TextContext::onCreateContext - 
multiple data sequences" );
             return this;    // collect value in onCharacters()
-        case CX_TOKEN( txData ):
-            // CT_TextData can have a <cx:v> element or a sequence
-            // <cx:f> <cx:v>. The former case will be handled through the
-            // CX_TOKEN(v) above, but the latter is not handled. TODO
-            return this;
     }
     return nullptr;
 }
diff --git a/oox/source/drawingml/chart/typegroupcontext.cxx 
b/oox/source/drawingml/chart/typegroupcontext.cxx
index 632b42711428..d5f97c25cdac 100644
--- a/oox/source/drawingml/chart/typegroupcontext.cxx
+++ b/oox/source/drawingml/chart/typegroupcontext.cxx
@@ -405,11 +405,6 @@ ChartexTypeGroupContext::~ChartexTypeGroupContext()
 {
 }
 
-void ChartexTypeGroupContext::CreateSeries()
-{
-    mrModel.maSeries.create(false);
-}
-
 ContextHandlerRef ChartexTypeGroupContext::onCreateContext( [[maybe_unused]] 
sal_Int32 nElement,
         [[maybe_unused]] const AttributeList& rAttribs )
 {
diff --git a/oox/source/export/chartexport.cxx 
b/oox/source/export/chartexport.cxx
index ded5f714fc1b..fecd8431f770 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -162,75 +162,6 @@ private:
     OUString m_aRole;
 };
 
-void outputStyleEntry(FSHelperPtr pFS, sal_Int32 nElTokenId)
-{
-    // Just default values for now
-    pFS->startElement(FSNS(XML_cs, nElTokenId));
-    pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor");
-    pFS->endElement(FSNS(XML_cs, nElTokenId));
-}
-
-void outputChartAreaStyleEntry(FSHelperPtr pFS)
-{
-    // Just default values for now
-    pFS->startElement(FSNS(XML_cs, XML_chartArea), XML_mods, 
"allowNoFillOverride allowNoLineOverride");
-    pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0");
-
-    pFS->startElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor");
-    pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "tx1");
-    pFS->endElement(FSNS(XML_cs, XML_fontRef));
-
-    pFS->startElement(FSNS(XML_cs, XML_spPr));
-
-    pFS->startElement(FSNS(XML_a, XML_solidFill));
-    pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "bg1");
-    pFS->endElement(FSNS(XML_a, XML_solidFill));
-
-    pFS->startElement(FSNS(XML_a, XML_ln), XML_w, "9525", XML_cap, "flat",
-            XML_cmpd, "sng", XML_algn, "ctr");
-    pFS->startElement(FSNS(XML_a, XML_solidFill));
-    pFS->startElement(FSNS(XML_a, XML_schemeClr), XML_val, "tx1");
-    pFS->singleElement(FSNS(XML_a, XML_lumMod), XML_val, "15000");
-    pFS->singleElement(FSNS(XML_a, XML_lumOff), XML_val, "85000");
-    pFS->endElement(FSNS(XML_a, XML_schemeClr));
-    pFS->endElement(FSNS(XML_a, XML_solidFill));
-    pFS->singleElement(FSNS(XML_a, XML_round));
-    pFS->endElement(FSNS(XML_a, XML_ln));
-
-    pFS->endElement(FSNS(XML_cs, XML_spPr));
-
-    pFS->endElement(FSNS(XML_cs, XML_chartArea));
-}
-
-void outputDataPointStyleEntry(FSHelperPtr pFS)
-{
-    pFS->startElement(FSNS(XML_cs, XML_dataPoint));
-    pFS->singleElement(FSNS(XML_cs, XML_lnRef), XML_idx, "0");
-
-    pFS->startElement(FSNS(XML_cs, XML_fillRef), XML_idx, "0");
-    pFS->singleElement(FSNS(XML_cs, XML_styleClr), XML_val, "auto");
-    pFS->endElement(FSNS(XML_cs, XML_fillRef));
-
-    pFS->singleElement(FSNS(XML_cs, XML_effectRef), XML_idx, "0");
-
-    pFS->startElement(FSNS(XML_cs, XML_fontRef), XML_idx, "minor");
-    pFS->singleElement(FSNS(XML_cs, XML_schemeClr), XML_val, "tx1");
-    pFS->endElement(FSNS(XML_cs, XML_fontRef));
-
-    pFS->startElement(FSNS(XML_cs, XML_spPr));
-    pFS->startElement(FSNS(XML_a, XML_solidFill));
-    pFS->singleElement(FSNS(XML_a, XML_schemeClr), XML_val, "phClr");
-    pFS->endElement(FSNS(XML_a, XML_solidFill));
-    pFS->endElement(FSNS(XML_cs, XML_spPr));
-
-    pFS->endElement(FSNS(XML_cs, XML_dataPoint));
-}
-
 }
 
 static Reference< chart2::data::XLabeledDataSequence > lcl_getCategories( 
const Reference< chart2::XDiagram > & xDiagram, bool& bHasDateCategories )
@@ -1051,114 +982,7 @@ void ChartExport::WriteChartObj( const Reference< XShape 
>& xShape, sal_Int32 nI
 
     SetFS( pChart );
     ExportContent();
-
-    if (bIsChartex) {
-        SetFS( pChart );
-        sRelativePath ="";
-
-        FSHelperPtr pChartFS = GetFS();
-
-        // output style and colorstyle files
-
-        // first style
-        static constexpr char sStyleFnamePrefix[] = "style";
-        OUStringBuffer sFullStreamBuf;
-        sFullStreamBuf.appendAscii(sFullPath);
-        sFullStreamBuf = sFullStreamBuf + sStyleFnamePrefix + 
OUString::number(nChartCount) + ".xml";
-        sFullStream = sFullStreamBuf.makeStringAndClear();
-        OUStringBuffer sRelativeStreamBuf;
-        sRelativeStreamBuf.appendAscii(sRelativePath);
-        sRelativeStreamBuf = sRelativeStreamBuf + sStyleFnamePrefix + 
OUString::number(nChartCount) + ".xml";
-        sRelativeStream = sRelativeStreamBuf.makeStringAndClear();
-
-        FSHelperPtr pStyle = CreateOutputStream(
-                sFullStream,
-                sRelativeStream,
-                pChartFS->getOutputStream(),
-                u"application/vnd.ms-office.chartstyle+xml"_ustr,
-                oox::getRelationship(Relationship::CHARTSTYLE),
-                &sId,
-                true /* for some reason this doesn't have a header line */);
-
-        SetFS( pStyle );
-        pFS = GetFS();
-
-        pFS->startElement(FSNS(XML_cs, XML_chartStyle),
-                FSNS( XML_xmlns, XML_cs ), pFB->getNamespaceURL(OOX_NS(cs)),
-                FSNS( XML_xmlns, XML_a ), pFB->getNamespaceURL(OOX_NS(dml)),
-                XML_id, "419" /* no idea what this number is supposed to be 
*/);
-
-        outputStyleEntry(pFS, XML_axisTitle);;
-        outputStyleEntry(pFS, XML_categoryAxis);
-        outputChartAreaStyleEntry(pFS);
-        outputStyleEntry(pFS, XML_dataLabel);
-        outputDataPointStyleEntry(pFS);
-        outputStyleEntry(pFS, XML_dataPoint3D);
-        outputStyleEntry(pFS, XML_dataPointLine);
-        outputStyleEntry(pFS, XML_dataPointMarker);
-        outputStyleEntry(pFS, XML_dataPointWireframe);
-        outputStyleEntry(pFS, XML_dataTable);
-        outputStyleEntry(pFS, XML_downBar);
-        outputStyleEntry(pFS, XML_dropLine);
-        outputStyleEntry(pFS, XML_errorBar);
-        outputStyleEntry(pFS, XML_floor);
-        outputStyleEntry(pFS, XML_gridlineMajor);
-        outputStyleEntry(pFS, XML_gridlineMinor);
-        outputStyleEntry(pFS, XML_hiLoLine);
-        outputStyleEntry(pFS, XML_leaderLine);
-        outputStyleEntry(pFS, XML_legend);
-        outputStyleEntry(pFS, XML_plotArea);
-        outputStyleEntry(pFS, XML_plotArea3D);
-        outputStyleEntry(pFS, XML_seriesAxis);
-        outputStyleEntry(pFS, XML_seriesLine);
-        outputStyleEntry(pFS, XML_title);
-        outputStyleEntry(pFS, XML_trendline);
-        outputStyleEntry(pFS, XML_trendlineLabel);
-        outputStyleEntry(pFS, XML_upBar);
-        outputStyleEntry(pFS, XML_valueAxis);
-        outputStyleEntry(pFS, XML_wall);
-
-        pFS->endElement(FSNS(XML_cs, XML_chartStyle));
-
-        pStyle->endDocument();
-
-        // now colorstyle
-        static constexpr char sColorFnamePrefix[] = "colors";
-        sFullStreamBuf = OUStringBuffer();
-        sFullStreamBuf.appendAscii(sFullPath);
-        sFullStreamBuf = sFullStreamBuf + sColorFnamePrefix + 
OUString::number(nChartCount) + ".xml";
-        sFullStream = sFullStreamBuf.makeStringAndClear();
-        sRelativeStreamBuf = OUStringBuffer();
-        sRelativeStreamBuf.appendAscii(sRelativePath);
-        sRelativeStreamBuf = sRelativeStreamBuf + sColorFnamePrefix + 
OUString::number(nChartCount) + ".xml";
-        sRelativeStream = sRelativeStreamBuf.makeStringAndClear();
-
-        FSHelperPtr pColorStyle = CreateOutputStream(
-                sFullStream,
-                sRelativeStream,
-                pChartFS->getOutputStream(),
-                u"application/vnd.ms-office.chartcolorstyle+xml"_ustr,
-                oox::getRelationship(Relationship::CHARTCOLORSTYLE),
-                &sId,
-                true /* also no header line */);
-
-        SetFS( pColorStyle );
-        pFS = GetFS();
-
-        pFS->startElement(FSNS(XML_cs, XML_colorStyle),
-                FSNS( XML_xmlns, XML_cs ), pFB->getNamespaceURL(OOX_NS(cs)),
-                FSNS( XML_xmlns, XML_a ), pFB->getNamespaceURL(OOX_NS(dml)),
-                XML_meth, "cycle",
-                XML_id, "10" /* no idea what this number is supposed to be */);
-
-        pFS->singleElement(FSNS(XML_a, XML_schemeClr),
-                XML_val, "accent1");
-
-        pFS->endElement(FSNS(XML_cs, XML_colorStyle));
-
-        pColorStyle->endDocument();
-    }
-
+    SetFS( pFS );
     pChart->endDocument();
 }
 
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 9790c745150d..0bf735cd48ea 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -5816,9 +5816,7 @@ sax_fastparser::FSHelperPtr DrawingML::CreateOutputStream 
(
     const Reference< XOutputStream >& xParentRelation,
     const OUString& sContentType,
     const OUString& sRelationshipType,
-    OUString* pRelationshipId,
-    // if bNoHeader is true, don't create a header (<?xml... ) line
-    bool bNoHeader /* = false */     )
+    OUString* pRelationshipId )
 {
     OUString sRelationshipId;
     if (xParentRelation.is())
@@ -5829,8 +5827,7 @@ sax_fastparser::FSHelperPtr DrawingML::CreateOutputStream 
(
     if( pRelationshipId )
         *pRelationshipId = sRelationshipId;
 
-    sax_fastparser::FSHelperPtr p = GetFB()->openFragmentStreamWithSerializer(
-            sFullStream, sContentType, bNoHeader );
+    sax_fastparser::FSHelperPtr p = GetFB()->openFragmentStreamWithSerializer( 
sFullStream, sContentType );
 
     return p;
 }
diff --git a/oox/source/token/namespaces-strict.txt 
b/oox/source/token/namespaces-strict.txt
index e7cd1940def9..a2b5f52e600a 100644
--- a/oox/source/token/namespaces-strict.txt
+++ b/oox/source/token/namespaces-strict.txt
@@ -92,12 +92,8 @@ p15                     
http://schemas.microsoft.com/office/powerpoint/2012/main
 x12ac                   
http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac
 c15                     http://schemas.microsoft.com/office/drawing/2012/chart
 x15                     
http://schemas.microsoft.com/office/spreadsheetml/2010/11/main
-xr                      
http://schemas.microsoft.com/office/spreadsheetml/2014/revision
 xr2                     
http://schemas.microsoft.com/office/spreadsheetml/2015/revision2
-xr6                     
http://schemas.microsoft.com/office/spreadsheetml/2016/revision6
-xr10                    
http://schemas.microsoft.com/office/spreadsheetml/2016/revision10
 xr16                    
http://schemas.microsoft.com/office/spreadsheetml/2017/revision16
-cs                      
http://schemas.microsoft.com/office/drawing/2012/chartStyle
 
 # MSO 2014 extensions ---------------------------------------------------------
 
diff --git a/oox/source/token/namespaces.txt b/oox/source/token/namespaces.txt
index 49adc190f7f8..d24fa7685e5f 100644
--- a/oox/source/token/namespaces.txt
+++ b/oox/source/token/namespaces.txt
@@ -88,14 +88,10 @@ wpc                     
http://schemas.microsoft.com/office/word/2010/wordproces
 w15                     http://schemas.microsoft.com/office/word/2012/wordml
 p15                     
http://schemas.microsoft.com/office/powerpoint/2012/main
 x12ac                   
http://schemas.microsoft.com/office/spreadsheetml/2011/1/ac
-c15                     http://schemas.microsoft.com/office/drawing/2012/chart
 x15                     
http://schemas.microsoft.com/office/spreadsheetml/2010/11/main
-xr                      
http://schemas.microsoft.com/office/spreadsheetml/2014/revision
+c15                     http://schemas.microsoft.com/office/drawing/2012/chart
 xr2                     
http://schemas.microsoft.com/office/spreadsheetml/2015/revision2
-xr6                     
http://schemas.microsoft.com/office/spreadsheetml/2016/revision6
-xr10                    
http://schemas.microsoft.com/office/spreadsheetml/2016/revision10
 xr16                    
http://schemas.microsoft.com/office/spreadsheetml/2017/revision16
-cs                      
http://schemas.microsoft.com/office/drawing/2012/chartStyle
 
 # MSO 2014 extensions ---------------------------------------------------------
 
diff --git a/oox/source/token/relationship.inc 
b/oox/source/token/relationship.inc
index dee443a5fd6c..a63e1c6e71d2 100644
--- a/oox/source/token/relationship.inc
+++ b/oox/source/token/relationship.inc
@@ -1,8 +1,6 @@
 {Relationship::ACTIVEXCONTROLBINARY, 
u"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary"},
 {Relationship::CHART, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"},
-{Relationship::CHARTCOLORSTYLE, 
u"http://schemas.microsoft.com/office/2011/relationships/chartColorStyle"},
 {Relationship::CHARTEX, 
u"http://schemas.microsoft.com/office/2014/relationships/chartEx"},
-{Relationship::CHARTSTYLE, 
u"http://schemas.microsoft.com/office/2011/relationships/chartStyle"},
 {Relationship::CHARTUSERSHAPES, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes"},
 {Relationship::COMMENTS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
 {Relationship::COMMENTAUTHORS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors"},
diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt
index 14ff55990c6a..883e68f12def 100644
--- a/oox/source/token/tokens.txt
+++ b/oox/source/token/tokens.txt
@@ -755,7 +755,6 @@ axisId
 axisPage
 axisPosition
 axisRow
-axisTitle
 axisValues
 azure
 b
@@ -1114,7 +1113,6 @@ catAx
 catLst
 catalog
 category
-categoryAxis
 categoryEl
 categoryIdx
 ccw
@@ -1177,7 +1175,6 @@ characteristic
 charset
 chart
 chartAndTx
-chartArea
 chartData
 chartFormat
 chartFormats
@@ -1185,7 +1182,6 @@ chartObject
 chartPlus
 chartSpace
 chartStar
-chartStyle
 chartX
 chartex
 chartreuse
@@ -1315,7 +1311,6 @@ colorMarkers
 colorNegative
 colorScale
 colorSeries
-colorStyle
 colorTemp
 colorTemperature
 colormenu
@@ -1674,11 +1669,6 @@ dataModel
 dataModelExt
 dataOnRows
 dataOnly
-dataPoint
-dataPoint3D
-dataPointLine
-dataPointMarker
-dataPointWireframe
 dataPosition
 dataPt
 dataRef
@@ -1996,7 +1986,6 @@ doughnutChart
 down
 downArrow
 downArrowCallout
-downBar
 downBars
 downThenOver
 dpi
@@ -2016,7 +2005,6 @@ drill
 drop
 dropCap
 dropDownList
-dropLine
 dropLines
 dropauto
 ds
@@ -2167,7 +2155,6 @@ errBars
 errDir
 errValType
 error
-errorBar
 errorCaption
 errorStyle
 errorTitle
@@ -2578,8 +2565,6 @@ gridLinesSet
 gridSize
 gridSpacing
 gridSpan
-gridlineMajor
-gridlineMinor
 group
 groupBy
 groupChr
@@ -2695,7 +2680,6 @@ hex
 hexBinary
 hexagon
 hf
-hiLoLine
 hiLowLines
 hidden
 hiddenButton
@@ -3062,7 +3046,6 @@ lc
 ld
 le
 leader
-leaderLine
 leaderLines
 ledger
 left
@@ -3504,7 +3487,6 @@ modelId
 modern
 modified
 modifyVerifier
-mods
 mongolianVert
 monospace
 month
@@ -4096,7 +4078,6 @@ plaqueTabs
 plastic
 plcHide
 plotArea
-plotArea3D
 plotAreaRegion
 plotSurface
 plotVisOnly
@@ -4615,10 +4596,8 @@ ser
 serAx
 serLines
 series
-seriesAxis
 seriesEl
 seriesIdx
-seriesLine
 serverCommand
 serverField
 serverFill
@@ -5084,7 +5063,6 @@ strokeok
 strokeweight
 sty
 style
-styleClr
 styleData
 styleDef
 styleDefHdr
@@ -5492,7 +5470,6 @@ trees
 trellis
 trend
 trendline
-trendlineLabel
 trendlineLbl
 trendlineType
 tri
@@ -5611,7 +5588,6 @@ unsignedShort
 up
 upArrow
 upArrowCallout
-upBar
 upBars
 upDiag
 upDownArrow
@@ -5701,7 +5677,6 @@ vacatedStyle
 val
 valAx
 value
-valueAxis
 valueBetween
 valueColors
 valueColorPositions
@@ -5784,7 +5759,6 @@ wBefore
 wMode
 wOff
 wR
-wall
 warmMatte
 warning
 warp
@@ -5895,7 +5869,6 @@ x
 x12ac
 x14
 x15
-x2
 xAlign
 xIllusions
 xMode
@@ -5920,11 +5893,8 @@ xmlDataType
 xmlPr
 xmlns
 xpath
-xr
-xr10
-xr16
 xr2
-xr6
+xr16
 xrange
 xsc
 xscale
diff --git a/sc/source/filter/excel/excdoc.cxx 
b/sc/source/filter/excel/excdoc.cxx
index ad074ee779e7..f11c21b929fc 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -844,14 +844,7 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm )
     sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream();
     rWorkbook->startElement( XML_workbook,
             XML_xmlns, rStrm.getNamespaceURL(OOX_NS(xls)),
-            FSNS(XML_xmlns, XML_r), rStrm.getNamespaceURL(OOX_NS(officeRel)),
-            // the following are for chartex
-            FSNS(XML_xmlns, XML_mc), rStrm.getNamespaceURL(OOX_NS(mce)),
-            FSNS(XML_xmlns, XML_x15), rStrm.getNamespaceURL(OOX_NS(x15)),
-            FSNS(XML_xmlns, XML_xr), rStrm.getNamespaceURL(OOX_NS(xr)),
-            FSNS(XML_xmlns, XML_xr6), rStrm.getNamespaceURL(OOX_NS(xr6)),
-            FSNS(XML_xmlns, XML_xr10), rStrm.getNamespaceURL(OOX_NS(xr10)),
-            FSNS(XML_xmlns, XML_xr2), rStrm.getNamespaceURL(OOX_NS(xr2)) );
+            FSNS(XML_xmlns, XML_r), rStrm.getNamespaceURL(OOX_NS(officeRel)) );
     rWorkbook->singleElement( XML_fileVersion,
             XML_appName, "Calc"
             // OOXTODO: XML_codeName
diff --git a/sc/source/filter/excel/xestream.cxx 
b/sc/source/filter/excel/xestream.cxx
index 5a1e65a3faf5..fba4d2d94ba2 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -978,9 +978,7 @@ sax_fastparser::FSHelperPtr 
XclExpXmlStream::CreateOutputStream (
     const uno::Reference< XOutputStream >& xParentRelation,
     const char* sContentType,
     std::u16string_view sRelationshipType,
-    OUString* pRelationshipId,
-    // if bNoHeader is true, don't create a header (<?xml... ) line
-    bool bNoHeader /* = false */ )
+    OUString* pRelationshipId )
 {
     OUString sRelationshipId;
     if (xParentRelation.is())
@@ -991,8 +989,7 @@ sax_fastparser::FSHelperPtr 
XclExpXmlStream::CreateOutputStream (
     if( pRelationshipId )
         *pRelationshipId = sRelationshipId;
 
-    sax_fastparser::FSHelperPtr p = openFragmentStreamWithSerializer(
-            sFullStream, OUString::createFromAscii( sContentType ), bNoHeader 
);
+    sax_fastparser::FSHelperPtr p = openFragmentStreamWithSerializer( 
sFullStream, OUString::createFromAscii( sContentType ) );
 
     maOpenedStreamMap[ sFullStream ] = std::make_pair( sRelationshipId, p );
 
diff --git a/sc/source/filter/inc/xestream.hxx 
b/sc/source/filter/inc/xestream.hxx
index 05aa746d85a7..eae62965d92e 100644
--- a/sc/source/filter/inc/xestream.hxx
+++ b/sc/source/filter/inc/xestream.hxx
@@ -315,9 +315,7 @@ public:
                                         const css::uno::Reference< 
css::io::XOutputStream >& xParentRelation,
                                         const char* sContentType,
                                         std::u16string_view sRelationshipType,
-                                        OUString* pRelationshipId = nullptr,
-                                        // if bNoHeader is true, don't create 
a header (<?xml... ) line
-                                        bool bNoHeader = false);
+                                        OUString* pRelationshipId = nullptr );
 
     // ignore
     virtual bool exportDocument() override;
commit c48b72aa48123de68087229b7e3b6393e5db9f45
Author:     Kurt Nordback <[email protected]>
AuthorDate: Wed Jan 21 19:22:10 2026 -0700
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Mon Jan 26 11:57:26 2026 +0100

    Revert "tdf#165742 Step 4.4: Establish a narrow export path for chartex"
    
    This reverts commit db3f1b0d046b28599a4d8850ad8d9bd23e18b3e0.
    
    Change-Id: I8fe5ade0585dde0daed5a4511a8a3701e501ac46
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197902
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Tested-by: Tomaž Vajngerl <[email protected]>

diff --git a/chart2/qa/extras/chart2export2.cxx 
b/chart2/qa/extras/chart2export2.cxx
index 014e2ba600ec..d7012f091194 100644
--- a/chart2/qa/extras/chart2export2.cxx
+++ b/chart2/qa/extras/chart2export2.cxx
@@ -153,22 +153,6 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, 
testCrossBetweenODS)
                 u"between");
 }
 
-CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testChartexTitleXLSX)
-{
-    loadFromFile(u"xlsx/funnel1.xlsx");
-    save(u"Calc Office Open XML"_ustr);
-    xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chartEx1.xml"_ustr);
-    CPPUNIT_ASSERT(pXmlDoc);
-
-    assertXPath(pXmlDoc, 
"/cx:chartSpace/cx:chart/cx:plotArea/cx:plotAreaRegion/cx:series",
-                "layoutId", u"funnel");
-    assertXPathInsensitive(
-        pXmlDoc,
-        
"/cx:chartSpace/cx:chart/cx:plotArea/cx:plotAreaRegion/cx:series/cx:spPr/"
-        "a:solidFill/a:srgbClr",
-        "val", u"c55a11");
-}
-
 CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testAxisTitleRotationXLSX)
 {
     loadFromFile(u"xlsx/axis_title_rotation.xlsx");
diff --git a/chart2/qa/extras/data/xlsx/funnel1.xlsx 
b/chart2/qa/extras/data/xlsx/funnel1.xlsx
deleted file mode 100644
index 7ae3e6c32a59..000000000000
Binary files a/chart2/qa/extras/data/xlsx/funnel1.xlsx and /dev/null differ
diff --git a/include/oox/export/chartexport.hxx 
b/include/oox/export/chartexport.hxx
index 4cdc9f748493..9d76e78ab84f 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -231,7 +231,7 @@ private:
         bool& rPrimaryAxes, sal_uInt32& nIdx);
 
     void exportSeriesText(
-        const css::uno::Reference< css::chart2::data::XDataSequence >& 
xValueSeq, bool bIsChartex );
+        const css::uno::Reference< css::chart2::data::XDataSequence >& 
xValueSeq );
     void exportSeriesCategory(
         const css::uno::Reference< css::chart2::data::XDataSequence >& 
xValueSeq, sal_Int32 nValueType = XML_cat );
     void exportSeriesValues(
@@ -258,22 +258,16 @@ private:
     void exportAxes( bool bIsChartex );
     void exportAxis(const AxisIdPair& rAxisIdPair,
             bool bIsChartex);
-    void exportOneAxis_chart(
+    void _exportAxis(
         const css::uno::Reference< css::beans::XPropertySet >& xAxisProp,
         const css::uno::Reference< css::drawing::XShape >& xAxisTitle,
         const css::uno::Reference< css::beans::XPropertySet >& xMajorGrid,
         const css::uno::Reference< css::beans::XPropertySet >& xMinorGrid,
         sal_Int32 nAxisType,
         const char* sAxisPos,
-        const AxisIdPair& rAxisIdPair);
-    void exportOneAxis_chartex(
-        const css::uno::Reference< css::beans::XPropertySet >& xAxisProp,
-        const css::uno::Reference< css::drawing::XShape >& xAxisTitle,
-        const css::uno::Reference< css::beans::XPropertySet >& xMajorGrid,
-        const css::uno::Reference< css::beans::XPropertySet >& xMinorGrid,
-        sal_Int32 nAxisType,
-        const AxisIdPair& rAxisIdPair);
-    void createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes);
+        const AxisIdPair& rAxisIdPair,
+        bool bIsChartex);
+    void exportAxesId(bool bPrimaryAxes, bool bCheckCombinedAxes = false);
     void exportView3D();
     bool isDeep3dChart();
     // Determine if (at least one) chart exported is from the 2014 chartex
diff --git a/oox/source/drawingml/chart/plotareacontext.cxx 
b/oox/source/drawingml/chart/plotareacontext.cxx
index 4355f8de7a64..29d769ebb251 100644
--- a/oox/source/drawingml/chart/plotareacontext.cxx
+++ b/oox/source/drawingml/chart/plotareacontext.cxx
@@ -116,7 +116,7 @@ PlotAreaContext::~PlotAreaContext()
 {
 }
 
-ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, 
[[maybe_unused]]const AttributeList& rAttribs)
+ContextHandlerRef PlotAreaContext::onCreateContext( sal_Int32 nElement, const 
AttributeList& rAttribs)
 {
     bool bMSO2007Doc = getFilter().isMSO2007Document();
     switch( getCurrentElement() )
@@ -170,7 +170,7 @@ ContextHandlerRef PlotAreaContext::onCreateContext( 
sal_Int32 nElement, [[maybe_
         case CX_TOKEN(plotArea) :
             switch (nElement) {
                 case CX_TOKEN(plotAreaRegion) :
-                    return new ChartexTypeGroupContext(*this, 
mrModel.maTypeGroups.create(nElement, false));
+                    return this;
                 case CX_TOKEN(axis) :
                     // TODO
                     return nullptr;
@@ -181,6 +181,43 @@ ContextHandlerRef PlotAreaContext::onCreateContext( 
sal_Int32 nElement, [[maybe_
                     return nullptr;
             }
             break;
+        case CX_TOKEN(plotAreaRegion) :
+            switch (nElement) {
+                case CX_TOKEN(plotSurface) :
+                    // TODO
+                    return nullptr;
+                case CX_TOKEN(series) :
+                    if (rAttribs.hasAttribute(XML_layoutId)) {
+                        sal_Int32 nChartType = 0;
+                        OUString sChartId = 
rAttribs.getStringDefaulted(XML_layoutId);
+                        assert(!sChartId.isEmpty());
+
+                        if (sChartId == "boxWhisker") {
+                            nChartType = CX_TOKEN(boxWhisker);
+                        } else if (sChartId == "clusteredColumn") {
+                            nChartType = CX_TOKEN(clusteredColumn);
+                        } else if (sChartId == "funnel") {
+                            nChartType = CX_TOKEN(funnel);
+                        } else if (sChartId == "paretoLine") {
+                            nChartType = CX_TOKEN(paretoLine);
+                        } else if (sChartId == "regionMap") {
+                            nChartType = CX_TOKEN(regionMap);
+                        } else if (sChartId == "sunburst") {
+                            nChartType = CX_TOKEN(sunburst);
+                        } else if (sChartId == "treemap") {
+                            nChartType = CX_TOKEN(treemap);
+                        } else if (sChartId == "waterfall") {
+                            nChartType = CX_TOKEN(waterfall);
+                        }
+                        assert(nChartType != 0);
+
+                        return new ChartexTypeGroupContext( *this,
+                                mrModel.maTypeGroups.create( nChartType, false 
) );
+                    }
+                    break;
+
+            }
+            break;
     }
     return nullptr;
 }
diff --git a/oox/source/drawingml/chart/seriescontext.cxx 
b/oox/source/drawingml/chart/seriescontext.cxx
index 4b3d18624c8c..02fb62a96c6e 100644
--- a/oox/source/drawingml/chart/seriescontext.cxx
+++ b/oox/source/drawingml/chart/seriescontext.cxx
@@ -410,7 +410,6 @@ ContextHandlerRef SeriesContextBase::onCreateContext( 
sal_Int32 nElement, const
     switch( getCurrentElement() )
     {
         case C_TOKEN( ser ):
-        case CX_TOKEN( series ):
             switch( nElement )
             {
                 case C_TOKEN( idx ):
@@ -420,13 +419,10 @@ ContextHandlerRef SeriesContextBase::onCreateContext( 
sal_Int32 nElement, const
                     mrModel.mnOrder = rAttribs.getInteger( XML_val, -1 );
                     return nullptr;
                 case C_TOKEN( spPr ):
-                case CX_TOKEN( spPr ):
                     return new ShapePropertiesContext( *this, 
mrModel.mxShapeProp.create() );
                 case C_TOKEN( tx ):
-                case CX_TOKEN( tx ):
                     return new TextContext( *this, mrModel.mxText.create() );
                 case C_TOKEN( extLst ):
-                case CX_TOKEN( extLst ):
                     return this;
             }
         break;
@@ -446,11 +442,9 @@ ContextHandlerRef SeriesContextBase::onCreateContext( 
sal_Int32 nElement, const
         break;
 
         case C_TOKEN( extLst ):
-        case CX_TOKEN( extLst ):
             switch( nElement )
             {
                 case C_TOKEN( ext ):
-                case CX_TOKEN( ext ):
                     if (mrModel.maSources.has( SeriesModel::DATALABELS ))
                         break;
 
@@ -774,29 +768,36 @@ ContextHandlerRef ChartexSeriesContext::onCreateContext( 
sal_Int32 nElement, con
 {
     switch( getCurrentElement() )
     {
-        case CX_TOKEN( series ):
-            switch( nElement )
-            {
-                case CX_TOKEN( valueColors ):
-                    // TODO
-                    return nullptr;
-                case CX_TOKEN( valueColorPositions ):
-                    // TODO
-                    return nullptr;
-                case CX_TOKEN( dataPt ):
-                    return new DataPointContext( *this, 
mrModel.maPoints.create(false) );
-                case CX_TOKEN( dataLabels ):
-                    return new DataLabelsContext( *this, 
mrModel.mxLabels.create(false) );
-                case CX_TOKEN( dataId ):
-                    // TODO
-                    return nullptr;
-                case CX_TOKEN( layoutPr ):
-                    // This looks complicated. TODO
-                    return nullptr;
-                case CX_TOKEN( axisId ):
-                    // TODO
-                    return nullptr;
-            }
+        case CX_TOKEN( tx ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( spPr ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( valueColors ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( valueColorPositions ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( dataPt ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( dataLabels ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( dataId ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( layoutPr ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( axisId ):
+            // TODO
+            return nullptr;
+        case CX_TOKEN( extLst ):
+            // TODO
+            return nullptr;
     }
     return SeriesContextBase::onCreateContext( nElement, rAttribs );
 }
diff --git a/oox/source/drawingml/chart/typegroupcontext.cxx 
b/oox/source/drawingml/chart/typegroupcontext.cxx
index f29b42ab42bf..632b42711428 100644
--- a/oox/source/drawingml/chart/typegroupcontext.cxx
+++ b/oox/source/drawingml/chart/typegroupcontext.cxx
@@ -413,56 +413,7 @@ void ChartexTypeGroupContext::CreateSeries()
 ContextHandlerRef ChartexTypeGroupContext::onCreateContext( [[maybe_unused]] 
sal_Int32 nElement,
         [[maybe_unused]] const AttributeList& rAttribs )
 {
-    if (isRootElement()) switch (nElement) {
-        case CX_TOKEN(plotSurface) :
-            // TODO
-            return nullptr;
-        case CX_TOKEN(series) :
-            if (rAttribs.hasAttribute(XML_layoutId)) {
-                // If this is the first series, then the type ID is currently
-                // set to <cx:plotAreaRegion>. If this is not the first series
-                // in a multi-series chart, it should be set to the previous
-                // chart type in the series (which *should* only be another
-                // chartex type, not a <c> type). In either case, set it
-                // to the specific chart type based on the layoutId attribute
-                assert(mrModel.mnTypeId == CX_TOKEN(plotAreaRegion) ||
-                        mrModel.mnTypeId == CX_TOKEN(boxWhisker) ||
-                        mrModel.mnTypeId == CX_TOKEN(clusteredColumn) ||
-                        mrModel.mnTypeId == CX_TOKEN(funnel) ||
-                        mrModel.mnTypeId == CX_TOKEN(paretoLine) ||
-                        mrModel.mnTypeId == CX_TOKEN(regionMap) ||
-                        mrModel.mnTypeId == CX_TOKEN(sunburst) ||
-                        mrModel.mnTypeId == CX_TOKEN(treemap) ||
-                        mrModel.mnTypeId == CX_TOKEN(waterfall));
-                OUString sChartId = rAttribs.getStringDefaulted(XML_layoutId);
-                assert(!sChartId.isEmpty());
-
-                if (sChartId == "boxWhisker") {
-                    mrModel.mnTypeId = CX_TOKEN(boxWhisker);
-                } else if (sChartId == "clusteredColumn") {
-                    mrModel.mnTypeId = CX_TOKEN(clusteredColumn);
-                } else if (sChartId == "funnel") {
-                    mrModel.mnTypeId = CX_TOKEN(funnel);
-                } else if (sChartId == "paretoLine") {
-                    mrModel.mnTypeId = CX_TOKEN(paretoLine);
-                } else if (sChartId == "regionMap") {
-                    mrModel.mnTypeId = CX_TOKEN(regionMap);
-                } else if (sChartId == "sunburst") {
-                    mrModel.mnTypeId = CX_TOKEN(sunburst);
-                } else if (sChartId == "treemap") {
-                    mrModel.mnTypeId = CX_TOKEN(treemap);
-                } else if (sChartId == "waterfall") {
-                    mrModel.mnTypeId = CX_TOKEN(waterfall);
-                } else {
-                    assert(false);
-                }
-
-                return new ChartexSeriesContext(*this, 
mrModel.maSeries.create(false));
-            }
-            break;
-    }
-
-    return nullptr;
+    return new ChartexSeriesContext( *this, mrModel.maSeries.create(false) );
 }
 
 } // namespace oox::drawingml::chart
diff --git a/oox/source/export/chartexport.cxx 
b/oox/source/export/chartexport.cxx
index a5727f919ecb..ded5f714fc1b 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -450,20 +450,6 @@ static OUString lcl_flattenStringSequence( const Sequence< 
OUString > & rSequenc
     return aResult.makeStringAndClear();
 }
 
-static void lcl_writeChartexString(FSHelperPtr pFS, std::u16string_view sOut)
-{
-    pFS->startElement(FSNS(XML_cx, XML_tx));
-    // cell range doesn't seem to be supported in chartex?
-    // TODO: also handle <cx:rich>
-    pFS->startElement(FSNS(XML_cx, XML_txData));
-    // TODO: also handle <cx:f> <cx:v>
-    pFS->startElement(FSNS(XML_cx, XML_v));
-    pFS->writeEscaped(sOut);
-    pFS->endElement( FSNS( XML_cx, XML_v ) );
-    pFS->endElement( FSNS( XML_cx, XML_txData ) );
-    pFS->endElement( FSNS( XML_cx, XML_tx ) );
-}
-
 static Sequence< OUString > lcl_getLabelSequence( const Reference< 
chart2::data::XDataSequence > & xLabelSeq )
 {
     Sequence< OUString > aLabels;
@@ -1287,6 +1273,7 @@ void ChartExport::exportChartSpace( const Reference< 
css::chart::XChartDocument
     // TODO: printSettings
     // TODO: style
     // TODO: text properties
+    // TODO: shape properties
     Reference< XPropertySet > xPropSet = xChartDoc->getArea();
     if( xPropSet.is() )
         exportShapeProps( xPropSet, bIsChartex );
@@ -1865,7 +1852,16 @@ void ChartExport::exportTitle( const Reference< XShape 
>& xShape, bool bIsCharte
 
     if (bIsChartex) {
         pFS->startElement(FSNS(XML_cx, XML_title));
-        lcl_writeChartexString(pFS, xFormattedTitle[0]->getString());
+        pFS->startElement(FSNS(XML_cx, XML_tx));
+        pFS->startElement(FSNS(XML_cx, XML_txData));
+        pFS->startElement(FSNS(XML_cx, XML_v));
+
+        // TODO: this is probably not right?
+        pFS->writeEscaped( xFormattedTitle[0]->getString() );
+
+        pFS->endElement(FSNS(XML_cx, XML_v));
+        pFS->endElement(FSNS(XML_cx, XML_txData));
+        pFS->endElement(FSNS(XML_cx, XML_tx));
     } else {
         pFS->startElement(FSNS(XML_c, XML_title));
         pFS->startElement(FSNS(XML_c, XML_tx));
@@ -1963,8 +1959,7 @@ void ChartExport::exportTitle( const Reference< XShape >& 
xShape, bool bIsCharte
     if (aManualLayout.hasValue())
     {
         if (bIsChartex) {
-            // TODO. Chartex doesn't have a manualLayout tag, but does have
-            // "pos" and "align" attributes. Not sure how these correspond.
+            // TODO
         } else {
             pFS->startElement(FSNS(XML_c, XML_layout));
             pFS->startElement(FSNS(XML_c, XML_manualLayout));
@@ -2123,7 +2118,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);
+        exportAxesId(true);
         pFS->endElement(FSNS(XML_c, XML_barChart));
     }
 
@@ -2252,11 +2247,10 @@ void ChartExport::exportPlotArea(const Reference< 
css::chart::XChartDocument >&
     }
 
     //Axis Data
-    exportAxes(bIsChartex);
+    exportAxes( bIsChartex );
 
-    if (!bIsChartex) {
+    if (!bIsChartex) {  // not supported in chartex?
         // Data Table
-        // not supported in chartex?
         exportDataTable();
     }
 
@@ -2638,7 +2632,7 @@ void ChartExport::exportAreaChart( const Reference< 
chart2::XChartType >& xChart
         if (splitDataSeries.hasElements())
             exportSeries(xChartType, splitDataSeries, bPrimaryAxes, false);
 
-        createAxes(bPrimaryAxes, false);
+        exportAxesId(bPrimaryAxes);
 
         pFS->endElement(FSNS(XML_c, nTypeId));
     }
@@ -2741,7 +2735,7 @@ void ChartExport::exportBarChart(const Reference< 
chart2::XChartType >& xChartTy
             }
         }
 
-        createAxes(bPrimaryAxes, false);
+        exportAxesId(bPrimaryAxes);
 
         pFS->endElement(FSNS(XML_c, nTypeId));
     }
@@ -2766,7 +2760,7 @@ void ChartExport::exportBubbleChart( const Reference< 
chart2::XChartType >& xCha
         if (splitDataSeries.hasElements())
             exportSeries(xChartType, splitDataSeries, bPrimaryAxes, false);
 
-        createAxes(bPrimaryAxes, false);
+        exportAxesId(bPrimaryAxes);
 
         pFS->endElement(FSNS(XML_c, XML_bubbleChart));
     }
@@ -2788,6 +2782,9 @@ void ChartExport::exportFunnelChart( const Reference< 
chart2::XChartType >& xCha
         bool bPrimaryAxes = false;
         exportSeries(xChartType, splitDataSeries, bPrimaryAxes, true);
 
+        // TODO: in chartex, axis is an element of cx:plotArea
+        //exportAxesId(bPrimaryAxes);
+
         pFS->endElement(FSNS(XML_cx, XML_series));
     }
 }
@@ -2905,7 +2902,7 @@ void ChartExport::exportLineChart( const Reference< 
chart2::XChartType >& xChart
             pFS->singleElement(FSNS(XML_c, XML_marker), XML_val, marker);
         }
 
-        createAxes(bPrimaryAxes, true);
+        exportAxesId(bPrimaryAxes, true);
 
         pFS->endElement( FSNS( XML_c, nTypeId ) );
     }
@@ -2950,7 +2947,7 @@ void ChartExport::exportRadarChart( const Reference< 
chart2::XChartType >& xChar
     exportVaryColors(xChartType);
     bool bPrimaryAxes = true;
     exportAllSeries(xChartType, bPrimaryAxes);
-    createAxes(bPrimaryAxes, false);
+    exportAxesId(bPrimaryAxes);
 
     pFS->endElement( FSNS( XML_c, XML_radarChart ) );
 }
@@ -2980,7 +2977,7 @@ void ChartExport::exportScatterChartSeries( const 
Reference< chart2::XChartType
     bool bPrimaryAxes = true;
     if (pSeries)
         exportSeries(xChartType, *pSeries, bPrimaryAxes, false);
-    createAxes(bPrimaryAxes, false);
+    exportAxesId(bPrimaryAxes);
 
     pFS->endElement( FSNS( XML_c, XML_scatterChart ) );
 }
@@ -3028,7 +3025,7 @@ void ChartExport::exportStockChart( const Reference< 
chart2::XChartType >& xChar
             exportUpDownBars(xChartType);
         }
 
-        createAxes(bPrimaryAxes, false);
+        exportAxesId(bPrimaryAxes);
 
         pFS->endElement(FSNS(XML_c, XML_stockChart));
     }
@@ -3103,7 +3100,7 @@ void ChartExport::exportSurfaceChart( const Reference< 
chart2::XChartType >& xCh
     exportVaryColors(xChartType);
     bool bPrimaryAxes = true;
     exportAllSeries(xChartType, bPrimaryAxes);
-    createAxes(bPrimaryAxes, false);
+    exportAxesId(bPrimaryAxes);
 
     pFS->endElement( FSNS( XML_c, nTypeId ) );
 }
@@ -3186,167 +3183,161 @@ void ChartExport::exportSeries( const 
Reference<chart2::XChartType>& xChartType,
 
                 // have found the main sequence, then xValuesSeq and
                 // xLabelSeq contain those.  Otherwise both are empty
-                FSHelperPtr pFS = GetFS();
-
-                if (!bIsChartex) {
-                    pFS->startElement(FSNS(XML_c, XML_ser));
-
-                    // TODO: idx and order
-                    pFS->singleElement( FSNS( XML_c, XML_idx ),
-                        XML_val, OString::number(mnSeriesCount) );
-                    pFS->singleElement( FSNS( XML_c, XML_order ),
-                        XML_val, OString::number(mnSeriesCount++) );
-                }
+                {
+                    FSHelperPtr pFS = GetFS();
 
-                // export label
-                if( xLabelSeq.is() )
-                    exportSeriesText( xLabelSeq, bIsChartex );
+                    if (!bIsChartex) {
+                        pFS->startElement(FSNS(XML_c, XML_ser));
 
-                Reference<XPropertySet> xPropSet(xDataSeries, UNO_QUERY_THROW);
-                if( GetProperty( xPropSet, u"AttachedAxisIndex"_ustr) )
-                {
-                    sal_Int32 nLocalAttachedAxis = 0;
-                    mAny >>= nLocalAttachedAxis;
-                    rPrimaryAxes = isPrimaryAxes(nLocalAttachedAxis);
-                }
+                        // TODO: idx and order
+                        pFS->singleElement( FSNS( XML_c, XML_idx ),
+                            XML_val, OString::number(mnSeriesCount) );
+                        pFS->singleElement( FSNS( XML_c, XML_order ),
+                            XML_val, OString::number(mnSeriesCount++) );
 
-                // export shape properties
-                Reference< XPropertySet > xOldPropSet = 
SchXMLSeriesHelper::createOldAPISeriesPropertySet(
-                    rSeries, getModel() );
-                if( xOldPropSet.is() )
-                {
-                    exportShapeProps( xOldPropSet, bIsChartex );
-                }
+                        // export label
+                        if( xLabelSeq.is() )
+                            exportSeriesText( xLabelSeq );
 
-                if (!bIsChartex) {
-                    switch( eChartType )
-                    {
-                        case chart::TYPEID_BUBBLE:
-                        case chart::TYPEID_HORBAR:
-                        case chart::TYPEID_BAR:
+                        Reference<XPropertySet> xPropSet(xDataSeries, 
UNO_QUERY_THROW);
+                        if( GetProperty( xPropSet, u"AttachedAxisIndex"_ustr) )
                         {
-                            pFS->singleElement(FSNS(XML_c, 
XML_invertIfNegative), XML_val, "0");
+                            sal_Int32 nLocalAttachedAxis = 0;
+                            mAny >>= nLocalAttachedAxis;
+                            rPrimaryAxes = isPrimaryAxes(nLocalAttachedAxis);
                         }
-                        break;
-                        case chart::TYPEID_LINE:
+
+                        // export shape properties
+                        Reference< XPropertySet > xOldPropSet = 
SchXMLSeriesHelper::createOldAPISeriesPropertySet(
+                            rSeries, getModel() );
+                        if( xOldPropSet.is() )
                         {
-                            exportMarker(xOldPropSet);
-                            break;
+                            exportShapeProps( xOldPropSet, false );
                         }
-                        case chart::TYPEID_PIE:
-                        case chart::TYPEID_DOUGHNUT:
+
+                        switch( eChartType )
                         {
-                            if( xOldPropSet.is() && GetProperty( xOldPropSet, 
u"SegmentOffset"_ustr) )
+                            case chart::TYPEID_BUBBLE:
+                            case chart::TYPEID_HORBAR:
+                            case chart::TYPEID_BAR:
                             {
-                                sal_Int32 nOffset = 0;
-                                mAny >>= nOffset;
-                                pFS->singleElement( FSNS( XML_c, XML_explosion 
),
-                                    XML_val, OString::number( nOffset ) );
+                                pFS->singleElement(FSNS(XML_c, 
XML_invertIfNegative), XML_val, "0");
                             }
                             break;
+                            case chart::TYPEID_LINE:
+                            {
+                                exportMarker(xOldPropSet);
+                                break;
+                            }
+                            case chart::TYPEID_PIE:
+                            case chart::TYPEID_DOUGHNUT:
+                            {
+                                if( xOldPropSet.is() && GetProperty( 
xOldPropSet, u"SegmentOffset"_ustr) )
+                                {
+                                    sal_Int32 nOffset = 0;
+                                    mAny >>= nOffset;
+                                    pFS->singleElement( FSNS( XML_c, 
XML_explosion ),
+                                        XML_val, OString::number( nOffset ) );
+                                }
+                                break;
+                            }
+                            case chart::TYPEID_SCATTER:
+                            {
+                                exportMarker(xOldPropSet);
+                                break;
+                            }
+                            case chart::TYPEID_RADARLINE:
+                            {
+                                exportMarker(xOldPropSet);
+                                break;
+                            }
                         }
-                        case chart::TYPEID_SCATTER:
-                        {
-                            exportMarker(xOldPropSet);
-                            break;
-                        }
-                        case chart::TYPEID_RADARLINE:
-                        {
-                            exportMarker(xOldPropSet);
-                            break;
-                        }
-                    }
 
-                    // export data points
-                    exportDataPoints( uno::Reference< beans::XPropertySet >( 
rSeries, uno::UNO_QUERY ), nSeriesLength, eChartType );
-                }
+                        // export data points
+                        exportDataPoints( uno::Reference< beans::XPropertySet 
>( rSeries, uno::UNO_QUERY ), nSeriesLength, eChartType );
+                    }
 
-                DataLabelsRange aDLblsRange;
-                // export data labels
-                exportDataLabels(rSeries, nSeriesLength, eChartType, 
aDLblsRange, bIsChartex);
+                    DataLabelsRange aDLblsRange;
+                    // export data labels
+                    exportDataLabels(rSeries, nSeriesLength, eChartType, 
aDLblsRange, bIsChartex);
 
-                if (!bIsChartex) {
-                    exportTrendlines( rSeries );
+                    if (!bIsChartex) {
+                        exportTrendlines( rSeries );
 
-                    if( eChartType != chart::TYPEID_PIE &&
-                            eChartType != chart::TYPEID_RADARLINE )
-                    {
-                        //export error bars here
-                        Reference< XPropertySet > xSeriesPropSet( xSource, 
uno::UNO_QUERY );
-                        Reference< XPropertySet > xErrorBarYProps;
-                        xSeriesPropSet->getPropertyValue(u"ErrorBarY"_ustr) 
>>= xErrorBarYProps;
-                        if(xErrorBarYProps.is())
-                            exportErrorBar(xErrorBarYProps, true);
-                        if (eChartType != chart::TYPEID_BAR &&
-                                eChartType != chart::TYPEID_HORBAR)
+                        if( eChartType != chart::TYPEID_PIE &&
+                                eChartType != chart::TYPEID_RADARLINE )
                         {
-                            Reference< XPropertySet > xErrorBarXProps;
-                            
xSeriesPropSet->getPropertyValue(u"ErrorBarX"_ustr) >>= xErrorBarXProps;
-                            if(xErrorBarXProps.is())
-                                exportErrorBar(xErrorBarXProps, false);
+                            //export error bars here
+                            Reference< XPropertySet > xSeriesPropSet( xSource, 
uno::UNO_QUERY );
+                            Reference< XPropertySet > xErrorBarYProps;
+                            
xSeriesPropSet->getPropertyValue(u"ErrorBarY"_ustr) >>= xErrorBarYProps;
+                            if(xErrorBarYProps.is())
+                                exportErrorBar(xErrorBarYProps, true);
+                            if (eChartType != chart::TYPEID_BAR &&
+                                    eChartType != chart::TYPEID_HORBAR)
+                            {
+                                Reference< XPropertySet > xErrorBarXProps;
+                                
xSeriesPropSet->getPropertyValue(u"ErrorBarX"_ustr) >>= xErrorBarXProps;
+                                if(xErrorBarXProps.is())
+                                    exportErrorBar(xErrorBarXProps, false);
+                            }
                         }
-                    }
 
-                    // export categories
-                    if( eChartType != chart::TYPEID_SCATTER && eChartType != 
chart::TYPEID_BUBBLE && mxCategoriesValues.is() )
-                        exportSeriesCategory( mxCategoriesValues );
+                        // export categories
+                        if( eChartType != chart::TYPEID_SCATTER && eChartType 
!= chart::TYPEID_BUBBLE && mxCategoriesValues.is() )
+                            exportSeriesCategory( mxCategoriesValues );
 
-                    if( (eChartType == chart::TYPEID_SCATTER)
-                        || (eChartType == chart::TYPEID_BUBBLE) )
-                    {
-                        // export xVal
-                        Reference< chart2::data::XLabeledDataSequence > 
xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-x"_ustr ) );
-                        if( xSequence.is() )
+                        if( (eChartType == chart::TYPEID_SCATTER)
+                            || (eChartType == chart::TYPEID_BUBBLE) )
                         {
-                            Reference< chart2::data::XDataSequence > xValues( 
xSequence->getValues() );
-                            if( xValues.is() )
-                                exportSeriesValues( xValues, XML_xVal );
+                            // export xVal
+                            Reference< chart2::data::XLabeledDataSequence > 
xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-x"_ustr ) );
+                            if( xSequence.is() )
+                            {
+                                Reference< chart2::data::XDataSequence > 
xValues( xSequence->getValues() );
+                                if( xValues.is() )
+                                    exportSeriesValues( xValues, XML_xVal );
+                            }
+                            else if( mxCategoriesValues.is() )
+                                exportSeriesCategory( mxCategoriesValues, 
XML_xVal );
                         }
-                        else if( mxCategoriesValues.is() )
-                            exportSeriesCategory( mxCategoriesValues, XML_xVal 
);
-                    }
 
-                    if( eChartType == chart::TYPEID_BUBBLE )
-                    {
-                        // export yVal
-                        Reference< chart2::data::XLabeledDataSequence > 
xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-y"_ustr ) );
-                        if( xSequence.is() )
+                        if( eChartType == chart::TYPEID_BUBBLE )
                         {
-                            Reference< chart2::data::XDataSequence > xValues( 
xSequence->getValues() );
-                            if( xValues.is() )
-                                exportSeriesValues( xValues, XML_yVal );
+                            // export yVal
+                            Reference< chart2::data::XLabeledDataSequence > 
xSequence( lcl_getDataSequenceByRole( aSeqCnt, u"values-y"_ustr ) );
+                            if( xSequence.is() )
+                            {
+                                Reference< chart2::data::XDataSequence > 
xValues( xSequence->getValues() );
+                                if( xValues.is() )
+                                    exportSeriesValues( xValues, XML_yVal );
+                            }
                         }
-                    }
-
-                    // export values
-                    if( xValuesSeq.is() )
-                    {
-                        sal_Int32 nYValueType = XML_val;
-                        if( eChartType == chart::TYPEID_SCATTER )
-                            nYValueType = XML_yVal;
-                        else if( eChartType == chart::TYPEID_BUBBLE )
-                            nYValueType = XML_bubbleSize;
-                        exportSeriesValues( xValuesSeq, nYValueType );
-                    }
 
-                    if( eChartType == chart::TYPEID_SCATTER
-                            || eChartType == chart::TYPEID_LINE )
-                        exportSmooth();
+                        // export values
+                        if( xValuesSeq.is() )
+                        {
+                            sal_Int32 nYValueType = XML_val;
+                            if( eChartType == chart::TYPEID_SCATTER )
+                                nYValueType = XML_yVal;
+                            else if( eChartType == chart::TYPEID_BUBBLE )
+                                nYValueType = XML_bubbleSize;
+                            exportSeriesValues( xValuesSeq, nYValueType );
+                        }
 
-                    // tdf103988: "corrupted" files with Bubble chart opening 
in MSO
-                    if( eChartType == chart::TYPEID_BUBBLE )
-                        pFS->singleElement(FSNS(XML_c, XML_bubble3D), XML_val, 
"0");
+                        if( eChartType == chart::TYPEID_SCATTER
+                                || eChartType == chart::TYPEID_LINE )
+                            exportSmooth();
 
-                    if (!aDLblsRange.empty())
-                        writeDataLabelsRange(pFS, GetFB(), aDLblsRange);
+                        // tdf103988: "corrupted" files with Bubble chart 
opening in MSO
+                        if( eChartType == chart::TYPEID_BUBBLE )
+                            pFS->singleElement(FSNS(XML_c, XML_bubble3D), 
XML_val, "0");
 
-                    pFS->endElement( FSNS( XML_c, XML_ser ) );
-                } else {
-                    // chartex
+                        if (!aDLblsRange.empty())
+                            writeDataLabelsRange(pFS, GetFB(), aDLblsRange);
 
-                    // Align the data id here with that in exportData().
-                    // See DATA_ID_COMMENT
-                    pFS->singleElement(FSNS(XML_cx, XML_dataId), XML_val, "0");
+                        pFS->endElement( FSNS( XML_c, XML_ser ) );
+                    }
                 }
             }
         }
@@ -3388,7 +3379,7 @@ void ChartExport::exportCandleStickSeries(
 
                         // export label
                         if( xLabelSeq.is() )
-                            exportSeriesText( xLabelSeq, false );
+                            exportSeriesText( xLabelSeq );
 
                         // TODO:export shape properties
 
@@ -3408,37 +3399,30 @@ void ChartExport::exportCandleStickSeries(
     }
 }
 
-void ChartExport::exportSeriesText( const Reference< 
chart2::data::XDataSequence > & xValueSeq,
-        bool bIsChartex)
+void ChartExport::exportSeriesText( const Reference< 
chart2::data::XDataSequence > & xValueSeq )
 {
     FSHelperPtr pFS = GetFS();
+    pFS->startElement(FSNS(XML_c, XML_tx));
 
-    OUString aLabelString = 
lcl_flattenStringSequence(lcl_getLabelSequence(xValueSeq));
-
-    if (bIsChartex) {
-        lcl_writeChartexString(pFS, aLabelString);
-    } else {
-        pFS->startElement(FSNS(XML_c, XML_tx));
-
-        OUString aCellRange =  xValueSeq->getSourceRangeRepresentation();
-        aCellRange = parseFormula( aCellRange );
-        pFS->startElement(FSNS(XML_c, XML_strRef));
+    OUString aCellRange =  xValueSeq->getSourceRangeRepresentation();
+    aCellRange = parseFormula( aCellRange );
+    pFS->startElement(FSNS(XML_c, XML_strRef));
 
-        pFS->startElement(FSNS(XML_c, XML_f));
-        pFS->writeEscaped( aCellRange );
-        pFS->endElement( FSNS( XML_c, XML_f ) );
+    pFS->startElement(FSNS(XML_c, XML_f));
+    pFS->writeEscaped( aCellRange );
+    pFS->endElement( FSNS( XML_c, XML_f ) );
 
-        pFS->startElement(FSNS(XML_c, XML_strCache));
-        pFS->singleElement(FSNS(XML_c, XML_ptCount), XML_val, "1");
-        pFS->startElement(FSNS(XML_c, XML_pt), XML_idx, "0");
-        pFS->startElement(FSNS(XML_c, XML_v));
-        pFS->writeEscaped( aLabelString );
-        pFS->endElement( FSNS( XML_c, XML_v ) );
-        pFS->endElement( FSNS( XML_c, XML_pt ) );
-        pFS->endElement( FSNS( XML_c, XML_strCache ) );
-        pFS->endElement( FSNS( XML_c, XML_strRef ) );
-        pFS->endElement( FSNS( XML_c, XML_tx ) );
-    }
+    OUString aLabelString = 
lcl_flattenStringSequence(lcl_getLabelSequence(xValueSeq));
+    pFS->startElement(FSNS(XML_c, XML_strCache));
+    pFS->singleElement(FSNS(XML_c, XML_ptCount), XML_val, "1");
+    pFS->startElement(FSNS(XML_c, XML_pt), XML_idx, "0");
+    pFS->startElement(FSNS(XML_c, XML_v));
+    pFS->writeEscaped( aLabelString );
+    pFS->endElement( FSNS( XML_c, XML_v ) );
+    pFS->endElement( FSNS( XML_c, XML_pt ) );
+    pFS->endElement( FSNS( XML_c, XML_strCache ) );
+    pFS->endElement( FSNS( XML_c, XML_strRef ) );
+    pFS->endElement( FSNS( XML_c, XML_tx ) );
 }
 
 void ChartExport::exportSeriesCategory( const Reference< 
chart2::data::XDataSequence > & xValueSeq, sal_Int32 nValueType )
@@ -3890,39 +3874,23 @@ void ChartExport::exportAxis(const AxisIdPair& 
rAxisIdPair, bool bIsChartex)
         }
     }
 
-    if (bIsChartex) {
-        exportOneAxis_chartex(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, 
nAxisType,
-                rAxisIdPair);
-    } else {
-        exportOneAxis_chart(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, 
nAxisType,
-                sAxPos, rAxisIdPair);
-    }
-}
-
-static const char *getTickMarkLocStr(sal_Int32 nValue)
-{
-    const bool bInner = nValue & css::chart::ChartAxisMarks::INNER;
-    const bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER;
-    if( bInner && bOuter ) {
-        return "cross";
-    } else if( bInner ) {
-        return "in";
-    } else if( bOuter ) {
-        return "out";
-    } else {
-        return "none";
-    }
+    _exportAxis(xAxisProp, xAxisTitle, xMajorGrid, xMinorGrid, nAxisType,
+            sAxPos, rAxisIdPair, bIsChartex);
 }
 
-void ChartExport::exportOneAxis_chart(
+void ChartExport::_exportAxis(
     const Reference< XPropertySet >& xAxisProp,
     const Reference< drawing::XShape >& xAxisTitle,
     const Reference< XPropertySet >& xMajorGrid,
     const Reference< XPropertySet >& xMinorGrid,
     sal_Int32 nAxisType,
     const char* sAxisPos,
-    const AxisIdPair& rAxisIdPair)
+    const AxisIdPair& rAxisIdPair,
+    bool bIsChartex)
 {
+    // TODO for chartex
+    if (bIsChartex) return;
+
     FSHelperPtr pFS = GetFS();
     pFS->startElement(FSNS(XML_c, nAxisType));
     pFS->singleElement(FSNS(XML_c, XML_axId), XML_val, 
OString::number(rAxisIdPair.nAxisId));
@@ -3991,7 +3959,7 @@ void ChartExport::exportOneAxis_chart(
     if( xMajorGrid.is())
     {
         pFS->startElement(FSNS(XML_c, XML_majorGridlines));
-        exportShapeProps( xMajorGrid, false );
+        exportShapeProps( xMajorGrid, bIsChartex );
         pFS->endElement( FSNS( XML_c, XML_majorGridlines ) );
     }
 
@@ -3999,13 +3967,13 @@ void ChartExport::exportOneAxis_chart(
     if( xMinorGrid.is())
     {
         pFS->startElement(FSNS(XML_c, XML_minorGridlines));
-        exportShapeProps( xMinorGrid, false );
+        exportShapeProps( xMinorGrid, bIsChartex );
         pFS->endElement( FSNS( XML_c, XML_minorGridlines ) );
     }
 
     // title
     if( xAxisTitle.is() )
-        exportTitle( xAxisTitle, false );
+        exportTitle( xAxisTitle, bIsChartex );
 
     bool bLinkedNumFmt = true;
     if (GetProperty(xAxisProp, u"LinkNumberFormatToSource"_ustr))
@@ -4028,15 +3996,35 @@ void ChartExport::exportOneAxis_chart(
     if(GetProperty( xAxisProp, u"Marks"_ustr ) )
     {
         mAny >>= nValue;
-        pFS->singleElement(FSNS(XML_c, XML_majorTickMark), XML_val,
-                getTickMarkLocStr(nValue));
+        bool bInner = nValue & css::chart::ChartAxisMarks::INNER;
+        bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER;
+        const char* majorTickMark = nullptr;
+        if( bInner && bOuter )
+            majorTickMark = "cross";
+        else if( bInner )
+            majorTickMark = "in";
+        else if( bOuter )
+            majorTickMark = "out";
+        else
+            majorTickMark = "none";
+        pFS->singleElement(FSNS(XML_c, XML_majorTickMark), XML_val, 
majorTickMark);
     }
     // minorTickMark
     if(GetProperty( xAxisProp, u"HelpMarks"_ustr ) )
     {
         mAny >>= nValue;
-        pFS->singleElement(FSNS(XML_c, XML_minorTickMark), XML_val,
-                getTickMarkLocStr(nValue));
+        bool bInner = nValue & css::chart::ChartAxisMarks::INNER;
+        bool bOuter = nValue & css::chart::ChartAxisMarks::OUTER;
+        const char* minorTickMark = nullptr;
+        if( bInner && bOuter )
+            minorTickMark = "cross";
+        else if( bInner )
+            minorTickMark = "in";
+        else if( bOuter )
+            minorTickMark = "out";
+        else
+            minorTickMark = "none";
+        pFS->singleElement(FSNS(XML_c, XML_minorTickMark), XML_val, 
minorTickMark);
     }
     // tickLblPos
     const char* sTickLblPos = nullptr;
@@ -4071,9 +4059,9 @@ void ChartExport::exportOneAxis_chart(
     pFS->singleElement(FSNS(XML_c, XML_tickLblPos), XML_val, sTickLblPos);
 
     // shape properties
-    exportShapeProps( xAxisProp, false );
+    exportShapeProps( xAxisProp, bIsChartex );
 
-    exportTextProps(xAxisProp, false);
+    exportTextProps(xAxisProp, bIsChartex);
 
     pFS->singleElement(FSNS(XML_c, XML_crossAx), XML_val, 
OString::number(rAxisIdPair.nCrossAx));
 
@@ -4235,183 +4223,6 @@ void ChartExport::exportOneAxis_chart(
     pFS->endElement( FSNS( XML_c, nAxisType ) );
 }
 
-void ChartExport::exportOneAxis_chartex(
-    const Reference< XPropertySet >& xAxisProp,
-    const Reference< drawing::XShape >& xAxisTitle,
-    const Reference< XPropertySet >& xMajorGrid,
-    const Reference< XPropertySet >& xMinorGrid,
-    sal_Int32 nAxisType,
-    const AxisIdPair& rAxisIdPair)
-{
-    FSHelperPtr pFS = GetFS();
-    pFS->startElement(FSNS(XML_cx, XML_axis), XML_id, 
OString::number(rAxisIdPair.nAxisId));
-
-    // The following is in the 2010 chart code above:
-    //    bool bVisible = true;
-    //    if( xAxisProp.is() )
-    //    {
-    //        xAxisProp->getPropertyValue(u"Visible"_ustr) >>=  bVisible;
-    //    }
-    //    // only export each axis only once non-deleted
-    //    auto aItInsertedPair = maExportedAxis.insert(rAxisIdPair.nAxisType);
-    //    bool bDeleted = !aItInsertedPair.second;
-    //
-    //    pFS->singleElement(FSNS(XML_c, XML_delete), XML_val, !bDeleted && 
bVisible ? "0" : "1");
-    //
-    // Is chartex attribute "hidden" the same as !bVisible? And what to do if
-    // the axis is deleted, per above?
-
-    // ==== catScaling/valScaling
-    switch (nAxisType) {
-        case XML_catAx:
-            pFS->singleElement(FSNS(XML_cx, XML_catScaling) /* TODO: handle 
gapWidth */);
-            break;
-        case XML_valAx:
-            {
-                bool bAutoMax = false;
-                double dMax = 0; // Make VS happy
-                bool bMaxSpecified = false;
-                if(GetProperty( xAxisProp, u"AutoMax"_ustr ) )
-                    mAny >>= bAutoMax;
-
-                if( !bAutoMax && (GetProperty( xAxisProp, u"Max"_ustr ) ) )
-                {
-                    mAny >>= dMax;
-                    bMaxSpecified = true;
-                }
-
-                bool bAutoMin = false;
-                double dMin = 0; // Make VS happy
-                bool bMinSpecified = false;
-                if(GetProperty( xAxisProp, u"AutoMin"_ustr ) )
-                    mAny >>= bAutoMin;
-
-                if( !bAutoMin && (GetProperty( xAxisProp, u"Min"_ustr ) ) )
-                {
-                    mAny >>= dMin;
-                    bMinSpecified = true;
-                }
-
-                // TODO: handle majorUnit/minorUnit in the following
-                if (bMaxSpecified && bMinSpecified) {
-                    pFS->singleElement(FSNS(XML_cx, XML_valScaling),
-                            XML_max, OString::number(dMax),
-                            XML_min, OString::number(dMin));
-                } else if (!bMaxSpecified && bMinSpecified) {
-                    pFS->singleElement(FSNS(XML_cx, XML_valScaling),
-                            XML_min, OString::number(dMin));
-                } else if (bMaxSpecified && !bMinSpecified) {
-                    pFS->singleElement(FSNS(XML_cx, XML_valScaling),
-                            XML_max, OString::number(dMax));
-                } else {
-                    pFS->singleElement(FSNS(XML_cx, XML_valScaling));
-                }
-
-            }
-            break;
-        default:
-            // shouldn't happen
-            assert(false);
-    }
-
-    // ==== title
-    if( xAxisTitle.is() ) {
-        exportTitle( xAxisTitle, true );
-    }
-
-    // ==== units
-    if (GetProperty( xAxisProp, u"DisplayUnits"_ustr ) )
-    {
-        bool bDisplayUnits = false;
-        mAny >>= bDisplayUnits;
-        if (bDisplayUnits)
-        {
-            if (GetProperty( xAxisProp, u"BuiltInUnit"_ustr ))
-            {
-                OUString aVal;
-                mAny >>= aVal;
-                if(!aVal.isEmpty())
-                {
-                    pFS->startElement(FSNS(XML_cx, XML_units));
-
-                    pFS->startElement(FSNS(XML_cx, XML_unitsLabel));
-
-                    lcl_writeChartexString(pFS, aVal);
-
-                    pFS->endElement(FSNS(XML_cx, XML_unitsLabel));
-
-                    pFS->endElement( FSNS( XML_cx, XML_units ) );
-                }
-            }
-        }
-    }
-
-    // ==== majorGridlines
-    if( xMajorGrid.is())
-    {
-        pFS->startElement(FSNS(XML_cx, XML_majorGridlines));
-        exportShapeProps( xMajorGrid, true );
-        pFS->endElement( FSNS( XML_cx, XML_majorGridlines ) );
-    }
-
-    // ==== minorGridlines
-    if( xMinorGrid.is())
-    {
-        pFS->startElement(FSNS(XML_cx, XML_minorGridlines));
-        exportShapeProps( xMinorGrid, true );
-        pFS->endElement( FSNS( XML_cx, XML_minorGridlines ) );
-    }
-
-    // ==== majorTickMarks
-    if (GetProperty( xAxisProp, u"Marks"_ustr ) )
-    {
-        sal_Int32 nValue = 0;
-        mAny >>= nValue;
-        pFS->singleElement(FSNS(XML_cx, XML_majorTickMarks), XML_type,
-                getTickMarkLocStr(nValue));
-    }
-
-    // ==== minorTickMarks
-    if (GetProperty( xAxisProp, u"HelpMarks"_ustr ) )
-    {
-        sal_Int32 nValue = 0;
-        mAny >>= nValue;
-        pFS->singleElement(FSNS(XML_cx, XML_minorTickMarks), XML_type,
-                getTickMarkLocStr(nValue));
-    }
-
-    // ==== tickLabels consists of nothing but an extLst so I don't know how to
-    // handle it
-
-    // ==== numFmt
-    bool bLinkedNumFmt = true;
-    if (GetProperty(xAxisProp, u"LinkNumberFormatToSource"_ustr))
-        mAny >>= bLinkedNumFmt;
-
-    OUString aNumberFormatString(u"General"_ustr);
-    if (GetProperty(xAxisProp, u"NumberFormat"_ustr))
-    {
-        sal_Int32 nKey = 0;
-        mAny >>= nKey;
-        aNumberFormatString = getNumberFormatCode(nKey);
-    }
-
-    // We're always outputting this, which presumably isn't necessary, but it's
-    // not clear what the defaults are for determining if an explicit element 
is
-    // needed
-    pFS->singleElement(FSNS(XML_cx, XML_numFmt),
-            XML_formatCode, aNumberFormatString,
-            XML_sourceLinked, bLinkedNumFmt ? "1" : "0");
-
-    // ==== spPr
-    exportShapeProps( xAxisProp, true );
-
-    // ==== txPr
-    exportTextProps(xAxisProp, true);
-
-    pFS->endElement( FSNS( XML_cx, XML_axis ) );
-}
-
 struct LabelPlacementParam
 {
     bool mbExport;
@@ -5026,8 +4837,7 @@ void ChartExport::exportDataPoints(
     }
 }
 
-// Generalized axis output
-void ChartExport::createAxes(bool bPrimaryAxes, bool bCheckCombinedAxes)
+void ChartExport::exportAxesId(bool bPrimaryAxes, bool bCheckCombinedAxes)
 {
     sal_Int32 nAxisIdx, nAxisIdy;
     bool bPrimaryAxisExists = false;
@@ -5053,7 +4863,6 @@ 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));
diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt
index fc8676a16195..14ff55990c6a 100644
--- a/oox/source/token/tokens.txt
+++ b/oox/source/token/tokens.txt
@@ -1111,7 +1111,6 @@ cardinalText
 caseSensitive
 cat
 catAx
-catScaling
 catLst
 catalog
 category
@@ -3328,7 +3327,6 @@ majorFont
 majorGridlines
 majorHAnsi
 majorTickMark
-majorTickMarks
 majorTimeUnit
 majorUnit
 man
@@ -3483,7 +3481,6 @@ minorFont
 minorGridlines
 minorHAnsi
 minorTickMark
-minorTickMarks
 minorTimeUnit
 minorUnit
 mintCream
@@ -5416,7 +5413,6 @@ threePt
 thresh
 through
 thruBlk
-tickLabels
 tickLblPos
 tickLblSkip
 tickMarkSkip
@@ -5604,8 +5600,6 @@ uniqueName
 uniqueParent
 uniqueTag
 uniqueValues
-units
-unitsLabel
 unknown
 unknownRelationship
 unlocked
@@ -5706,7 +5700,6 @@ vSpace
 vacatedStyle
 val
 valAx
-valScaling
 value
 valueAxis
 valueBetween
diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx
index 84541419520d..ff6a1f8b68f5 100644
--- a/test/source/xmltesttools.cxx
+++ b/test/source/xmltesttools.cxx
@@ -461,8 +461,6 @@ void 
XmlTestTools::registerOOXMLNamespaces(xmlXPathContextPtr& pXmlXpathCtx)
                        
BAD_CAST("http://schemas.microsoft.com/office/drawing/2010/main";));
     xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("c"),
                        
BAD_CAST("http://schemas.openxmlformats.org/drawingml/2006/chart";));
-    xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("cx"),
-                       
BAD_CAST("http://schemas.microsoft.com/office/drawing/2014/chartex";));
     xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("x"),
                        
BAD_CAST("http://schemas.openxmlformats.org/spreadsheetml/2006/main";));
     xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("r"),

Reply via email to