From 549310b41fe732283d82dbd3eb313f3c93f15de8 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 6 Dec 2013 22:58:25 +0100 Subject: resolved fdo#66564 calculate formula cell once if AutoCalc disabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Was lost with 2ce72093cdc68e60fb06ddd4358e0bc7fc8c63a9 and previous restructuring. (cherry picked from commit 2212051e792cb5f51f4191afe83c85fc3730a087) Backported. Change-Id: Ie4c8bdb287b56448406c873840c26ec4759de375 Reviewed-on: https://gerrit.libreoffice.org/6965 Reviewed-by: Kohei Yoshida Reviewed-by: Markus Mohrhard Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- sc/source/ui/docshell/docfunc.cxx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 61786e2c22dc..b922508ba152 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -948,6 +948,24 @@ bool ScDocFunc::SetFormulaCell( const ScAddress& rPos, ScFormulaCell* pCell, boo pDoc->SetFormulaCell(rPos, xCell.release()); + // For performance reasons API calls may disable calculation while + // operating and recalculate once when done. If through user interaction + // and AutoCalc is disabled, calculate the formula (without its + // dependencies) once so the result matches the current document's content. + if (bInteraction && !pDoc->GetAutoCalc() && pCell) + { + // ScDocument/ScTable::SetFormulaCell() may have deleted pCell if + // position address was invalid, so check here again. This is + // backported code, new code handles that smarter.. + if (rPos.Tab() < pDoc->GetTableCount() && ValidColRow( rPos.Col(), rPos.Row())) + { + // calculate just the cell once and set Dirty again + pCell->Interpret(); + pCell->SetDirtyVar(); + pDoc->PutInFormulaTree( pCell); + } + } + if (bUndo) { svl::IUndoManager* pUndoMgr = rDocShell.GetUndoManager(); -- cgit v1.2.3