sc/source/filter/excel/xetable.cxx | 42 +++++++++++++------------------------ 1 file changed, 15 insertions(+), 27 deletions(-)
New commits: commit 108f4aa94b98ca6deffdc169068c175605d5ba67 Author: Karthik Godha <[email protected]> AuthorDate: Wed Feb 11 16:30:35 2026 +0530 Commit: Michael Stahl <[email protected]> CommitDate: Wed Feb 11 16:59:10 2026 +0100 XLSX: Completely discard formulas containing macros Change-Id: I8f2b034d83c14cf62f74ee3be1ed23663d5dfdad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199153 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 5702f97be9f6..388939b73340 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -1016,7 +1016,8 @@ void XclExpFormulaCell::SaveXml( XclExpXmlStream& rStrm ) if (bWriteFormula) { ScTokenArray aTokenArray(*mrScFmlaCell.GetCode()); - // If XLSX export then remove macro tokens from the array + bool bValid = true; + // Discard formulas containing macros in XLSX export. if (!rStrm.IsExportVBA()) { formula::FormulaTokenArrayPlainIterator aIter(aTokenArray); @@ -1025,38 +1026,25 @@ void XclExpFormulaCell::SaveXml( XclExpXmlStream& rStrm ) { if (t->GetOpCode() == ocMacro) { - sal_uInt16 nStart = aIter.GetIndex() - 1; - formula::FormulaToken* pNext = aIter.PeekNext(); - if (pNext && pNext->GetOpCode() == ocOpen) - { - sal_uInt16 nParenthesis = 0; - do - { - if (pNext->GetOpCode() == ocOpen) - nParenthesis++; - else if (pNext->GetOpCode() == ocClose) - nParenthesis--; - - aIter.Next(); - pNext = aIter.PeekNext(); - } while (nParenthesis > 0 && pNext); - } - aTokenArray.RemoveToken(nStart, aIter.GetIndex() - nStart); - aIter.AfterRemoveToken(nStart, aIter.GetIndex() - nStart); + bValid = false; + break; } t = aIter.Next(); } } - if (!bTagStarted) + if (bValid) { - rWorksheet->startElement( XML_f, - XML_aca, ToPsz( (mxTokArr && mxTokArr->IsVolatile()) || - (mxAddRec && mxAddRec->IsVolatile()) ) ); + if (!bTagStarted) + { + rWorksheet->startElement(XML_f, XML_aca, + ToPsz((mxTokArr && mxTokArr->IsVolatile()) + || (mxAddRec && mxAddRec->IsVolatile()))); + } + rWorksheet->writeEscaped(XclXmlUtils::ToOUString( + rStrm.GetRoot().GetCompileFormulaContext(), mrScFmlaCell.aPos, &aTokenArray, + mrScFmlaCell.GetErrCode())); + rWorksheet->endElement(XML_f); } - rWorksheet->writeEscaped(XclXmlUtils::ToOUString(rStrm.GetRoot().GetCompileFormulaContext(), - mrScFmlaCell.aPos, &aTokenArray, - mrScFmlaCell.GetErrCode())); - rWorksheet->endElement( XML_f ); } if( strcmp( sType, "inlineStr" ) == 0 )
