summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-08-02 19:55:08 +0200
committerEike Rathke <erack@redhat.com>2016-08-02 20:05:28 +0200
commitc82a81bbda104ef08dd9e18725a09475b2d65183 (patch)
tree50450671e1ecdcf09b00f79215bad7ecd4546643
parentb567278c4aa6e3dee331b60c71eb996babcc9d08 (diff)
Resolves: tdf#100582 SetMatColsRows() when constructing matrix ScFormulaCell
... 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
-rw-r--r--sc/source/core/data/column4.cxx14
1 files changed, 13 insertions, 1 deletions
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index f46c6ae2d180..0b7bc6a93b78 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<ScFormulaCell*> aFormulas;
std::vector<sc::RowSpan>::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;