diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-10-12 10:18:09 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-10-12 10:21:00 -0400 |
commit | 0b29a16d1dcffd75e49bd7ad3da867b0d0ebfa38 (patch) | |
tree | 525a4e4315bd3e4a5a3ac10acac63cc42c2eaa0f | |
parent | bf8876bb7e73587d423ac52fe8920ec198f43e7b (diff) |
fdo#83901: ROW() and COLUMN() to be properly recalculated on cell move.
For cases where ROW or COLUMN references another cell that has shifted.
Change-Id: Ic4bef8672dab811ceff6886d9af0388306a66485
-rw-r--r-- | sc/source/core/data/column.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index d6152dd5412b..521b942cb9af 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -2044,6 +2044,12 @@ class UpdateRefOnNonCopy : std::unary_function<sc::FormulaGroupEntry, void> if (pCode->IsRecalcModeOnRefMove()) aRes.mbValueChanged = true; } + else if (aRes.mbReferenceModified && pCode->IsRecalcModeOnRefMove()) + { + // The cell itself hasn't shifted. But it may have ROW or COLUMN + // referencing another cell that has. + aRes.mbValueChanged = true; + } if (aRes.mbNameModified) recompileTokenArray(*pTop); diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 8cd95986c73c..33f64e920b5a 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -2788,7 +2788,7 @@ bool ScFormulaCell::UpdateReferenceOnShift( if (bOnRefMove) // Cell may reference itself, e.g. ocColumn, ocRow without parameter - bOnRefMove = (bValChanged || (aPos != aOldPos)); + bOnRefMove = (bValChanged || (aPos != aOldPos) || bRefModified); bool bNewListening = false; bool bInDeleteUndo = false; |