From 10195ce5563d6ac93177b67d484151c01a751922 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Tue, 2 Aug 2016 19:55:08 +0200 Subject: Resolves: tdf#100582 SetMatColsRows() when constructing matrix ScFormulaCell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... from an ScFormulaCellGroup token array, because ScFormulaResult that holds the matrix dimensions is not cloned in that case as we don't clone from an ScFormulaCell. Change-Id: I13ab1b29db71ae1618580de995fe12ec423d4dc7 (cherry picked from commit c82a81bbda104ef08dd9e18725a09475b2d65183) Reviewed-on: https://gerrit.libreoffice.org/27809 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- sc/source/core/data/column4.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index 4c42a7d387c2..bfcf257df217 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -483,6 +483,16 @@ void ScColumn::CloneFormulaCell( sc::CellStoreType::iterator itPos = maCells.begin(); sc::CellTextAttrStoreType::iterator itAttrPos = maCellTextAttrs.begin(); + SCCOL nMatrixCols = 0; + SCROW nMatrixRows = 0; + sal_uInt8 nMatrixFlag = rSrc.GetMatrixFlag(); + if (nMatrixFlag == MM_FORMULA) + { + rSrc.GetMatColsRows( nMatrixCols, nMatrixRows); + SAL_WARN_IF( nMatrixCols != 1 || nMatrixRows != 1, "sc.core", + "ScColumn::CloneFormulaCell - cloning array/matrix with not exactly one column or row as single cell"); + } + std::vector aFormulas; std::vector::const_iterator itSpan = rRanges.begin(), itSpanEnd = rRanges.end(); for (; itSpan != itSpanEnd; ++itSpan) @@ -514,7 +524,9 @@ void ScColumn::CloneFormulaCell( xGroup->compileCode(*pDocument, aPos, pDocument->GetGrammar()); for (size_t i = 0; i < nLen; ++i, aPos.IncRow()) { - ScFormulaCell* pCell = new ScFormulaCell(pDocument, aPos, xGroup, pDocument->GetGrammar(), rSrc.GetMatrixFlag()); + ScFormulaCell* pCell = new ScFormulaCell(pDocument, aPos, xGroup, pDocument->GetGrammar(), nMatrixFlag); + if (nMatrixFlag == MM_FORMULA) + pCell->SetMatColsRows( nMatrixCols, nMatrixRows); if (i == 0) { xGroup->mpTopCell = pCell; -- cgit v1.2.3