diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-10-27 08:52:38 -0700 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-10-27 08:54:42 -0700 |
commit | 1eb82c78a223d9a0b2bb5c3f5c129c1ee8bdf303 (patch) | |
tree | 7fda4a368448722f54e7fcff2a31a59c7ea30b78 | |
parent | f70db32aa2df79cca42c44f05baf4baac6e04bf5 (diff) |
fdo#85215: Ensure that formula broadcasting works after sort.
When the reference update on sort is turned off.
Change-Id: I547dd1525a638dd447fe331e22583af4a7947308
-rw-r--r-- | sc/source/core/data/table3.cxx | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index 3e8250ab219a..04bbbce4d9f5 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -801,6 +801,15 @@ void ScTable::SortReorderByRow( ScSortInfoArray::RowsType* pRows = pArray->GetDataRows(); assert(pRows); // In sort-by-row mode we must have data rows already populated. + if (!pArray->IsUpdateRefs()) + { + // When the update ref mode is disabled, we need to detach all formula + // cells in the sorted range before reordering, and re-start them + // afterward. + sc::EndListeningContext aCxt(*pDocument); + DetachFormulaCells(aCxt, nCol1, nRow1, nCol2, nRow2); + } + // Split formula groups at the sort range boundaries (if applicable). std::vector<SCROW> aRowBounds; aRowBounds.reserve(2); @@ -1081,6 +1090,12 @@ void ScTable::SortReorderByRow( // Re-group columns in the sorted range too. for (SCCOL i = nCol1; i <= nCol2; ++i) aCol[i].RegroupFormulaCells(); + + if (!pArray->IsUpdateRefs()) + { + sc::StartListeningContext aCxt(*pDocument); + AttachFormulaCells(aCxt, nCol1, nRow1, nCol2, nRow2); + } } short ScTable::CompareCell( |