summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/cell.hxx2
-rw-r--r--sc/inc/formularesult.hxx12
-rw-r--r--sc/source/core/data/cell.cxx5
-rw-r--r--sc/source/core/data/table4.cxx1
4 files changed, 20 insertions, 0 deletions
diff --git a/sc/inc/cell.hxx b/sc/inc/cell.hxx
index 52244f6dca93..3bc7aee92b1f 100644
--- a/sc/inc/cell.hxx
+++ b/sc/inc/cell.hxx
@@ -535,6 +535,8 @@ public:
bool IsMultilineResult();
void MaybeInterpret();
+
+ void ResetFormulaResult();
};
// Iterator for references in a formula cell
diff --git a/sc/inc/formularesult.hxx b/sc/inc/formularesult.hxx
index c1cb90609275..94c62f83bbea 100644
--- a/sc/inc/formularesult.hxx
+++ b/sc/inc/formularesult.hxx
@@ -117,6 +117,8 @@ public:
mpToken->DecRef();
}
+ inline void Reset();
+
/** Well, guess what ... */
inline ScFormulaResult & operator=( const ScFormulaResult & r );
@@ -216,6 +218,16 @@ public:
inline ScMatrixFormulaCellToken* GetMatrixFormulaCellTokenNonConst();
};
+inline void ScFormulaResult::Reset()
+{
+ ResetToDefaults();
+
+ if (mbToken && mpToken)
+ mpToken->DecRef();
+
+ mbToken = true;
+ mpToken = NULL;
+}
inline void ScFormulaResult::ResetToDefaults()
{
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index 2f3df26edcbf..1f89aeda6a54 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -2041,6 +2041,11 @@ void ScFormulaCell::MaybeInterpret()
Interpret();
}
+void ScFormulaCell::ResetFormulaResult()
+{
+ aResult.Reset();
+}
+
EditTextObject* ScFormulaCell::CreateURLObject()
{
String aCellText;
diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx
index dac41110b777..6a21a07b7f9a 100644
--- a/sc/source/core/data/table4.cxx
+++ b/sc/source/core/data/table4.cxx
@@ -429,6 +429,7 @@ void ScTable::FillFormula(sal_uLong& /* nFormulaCounter */, bool /* bFirst */, S
pDocument->SetNoListening( true ); // noch falsche Referenzen
ScAddress aAddr( nDestCol, nDestRow, nTab );
ScFormulaCell* pDestCell = new ScFormulaCell( *pSrcCell, *pDocument, aAddr );
+ pDestCell->ResetFormulaResult(); // formula cell is interpreted later during fill.
aCol[nDestCol].Insert(nDestRow, pDestCell);
if ( bLast && pDestCell->GetMatrixFlag() )