sc/source/filter/excel/xecontent.cxx | 63 ++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 27 deletions(-)
New commits: commit 3854294b66d68bed97dbeaf9882b03046443dda2 Author: Karthik Godha <[email protected]> AuthorDate: Fri Jan 23 18:25:22 2026 +0530 Commit: Michael Stahl <[email protected]> CommitDate: Thu Feb 12 17:34:05 2026 +0100 tdf#170452: Export external refs of Data Validation External references used in data validation are not exported. To export External references they should be registered with XclExpLinkManager. Add explicit function call to XclExpFormulaCompiler::CreateFormula, this will eventually call XclExpLinkManager::FindExtSheet, which is used to register external refs. bug-document: forum-mso-de-39647.xls Change-Id: I0f010f0b5e990ba098361996598d7363647b05ba Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197954 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> (cherry picked from commit 97c290624f6e0d992ea5a075f316405dcfca8d38) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199244 diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index 9de0d67f76f5..beb1b95c871d 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -1832,34 +1832,20 @@ XclExpDV::XclExpDV( const XclExpRoot& rRoot, sal_uInt32 nScHandle ) : 2) List is taken from A1 -> formula is =A1 -> writes tRefNR token Formula compiler supports this by offering two different functions CreateDataValFormula() and CreateListValFormula(). */ - if(GetOutput() == EXC_OUTPUT_BINARY) - mxTokArr1 = rFmlaComp.CreateFormula( EXC_FMLATYPE_LISTVAL, *xScTokArr ); - else - msFormula1 = XclXmlUtils::ToOUString( GetCompileFormulaContext(), pValData->GetSrcPos(), - xScTokArr.get()); + mxTokArr1 = rFmlaComp.CreateFormula(EXC_FMLATYPE_LISTVAL, *xScTokArr); } } else { // no list validation -> convert the formula - if(GetOutput() == EXC_OUTPUT_BINARY) - mxTokArr1 = rFmlaComp.CreateFormula( EXC_FMLATYPE_DATAVAL, *xScTokArr ); - else - msFormula1 = XclXmlUtils::ToOUString( GetCompileFormulaContext(), pValData->GetSrcPos(), - xScTokArr.get()); + mxTokArr1 = rFmlaComp.CreateFormula(EXC_FMLATYPE_DATAVAL, *xScTokArr); } } // second formula xScTokArr = pValData->CreateFlatCopiedTokenArray( 1 ); if (xScTokArr) - { - if(GetOutput() == EXC_OUTPUT_BINARY) - mxTokArr2 = rFmlaComp.CreateFormula( EXC_FMLATYPE_DATAVAL, *xScTokArr ); - else - msFormula2 = XclXmlUtils::ToOUString( GetCompileFormulaContext(), pValData->GetSrcPos(), - xScTokArr.get()); - } + mxTokArr2 = rFmlaComp.CreateFormula(EXC_FMLATYPE_DATAVAL, *xScTokArr); } else { @@ -1932,18 +1918,41 @@ void XclExpDV::SaveXml( XclExpXmlStream& rStrm ) rWorksheet->endElement(FSNS(XML_mc, XML_Fallback)); rWorksheet->endElement(FSNS(XML_mc, XML_AlternateContent)); } - if (msList.isEmpty() && !msFormula1.isEmpty()) - { - rWorksheet->startElement(XML_formula1); - rWorksheet->writeEscaped( msFormula1 ); - rWorksheet->endElement( XML_formula1 ); - } - if( !msFormula2.isEmpty() ) + + if (const ScValidationData* pValData = GetDoc().GetValidationEntry(mnScHandle)) { - rWorksheet->startElement(XML_formula2); - rWorksheet->writeEscaped( msFormula2 ); - rWorksheet->endElement( XML_formula2 ); + if (msList.isEmpty()) + { + if (msFormula1.isEmpty()) + { + if (const std::unique_ptr<ScTokenArray> xScTokArr + = pValData->CreateFlatCopiedTokenArray(0)) + { + msFormula1 = XclXmlUtils::ToOUString(GetCompileFormulaContext(), + pValData->GetSrcPos(), xScTokArr.get()); + } + } + + if (!msFormula1.isEmpty()) + { + rWorksheet->startElement(XML_formula1); + rWorksheet->writeEscaped(msFormula1); + rWorksheet->endElement(XML_formula1); + } + } + if (const std::unique_ptr<ScTokenArray> xScTokArr = pValData->CreateFlatCopiedTokenArray(1)) + { + msFormula2 = XclXmlUtils::ToOUString(GetCompileFormulaContext(), pValData->GetSrcPos(), + xScTokArr.get()); + if (!msFormula2.isEmpty()) + { + rWorksheet->startElement(XML_formula2); + rWorksheet->writeEscaped(msFormula2); + rWorksheet->endElement(XML_formula2); + } + } } + rWorksheet->endElement( XML_dataValidation ); }
