summaryrefslogtreecommitdiff
path: root/sc/source
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2021-10-25 15:09:10 +0200
committerLászló Németh <nemeth@numbertext.org>2021-10-26 09:51:17 +0200
commit7d5703ca50d719fbd82615fb81da7949fe163ae5 (patch)
treea12f0bef69f0c20d24535b37e644f1fad8c316b0 /sc/source
parent514e83a0a548e61753b1238f55ee929c3c799eed (diff)
tdf#142010 XLS import: fix bad calculation after editing
Inserting a column messed up formulas in the test document of tdf#142010. This was a regression resulted by the tdf#89281 fix for a performance regression in XLS import related to shared formulas. Revert of commit ba686b9bd2596811141e4028947334f10799c356 "tdf#89281 fix performance regression of XLS import - cleanup" and commit b18b5b7edf3d14ef5f0efe53e367f88a423088c4 "tdf#89281 fix performance regression of XLS import". Change-Id: I96636fb1d84939385efbe7054a4271ff10b88907 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124151 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'sc/source')
-rw-r--r--sc/source/core/tool/token.cxx35
-rw-r--r--sc/source/filter/excel/excform.cxx9
2 files changed, 2 insertions, 42 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 9fc32499731d..114bf4107609 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -5321,41 +5321,6 @@ void ScTokenArray::WrapReference( const ScAddress& rPos, SCCOL nMaxCol, SCROW nM
}
}
-bool ScTokenArray::NeedsWrapReference( const ScAddress& rPos, SCCOL nMaxCol, SCROW nMaxRow ) const
-{
- FormulaToken** p = pCode.get();
- FormulaToken** pEnd = p + static_cast<size_t>(nLen);
- for (; p != pEnd; ++p)
- {
- switch ((*p)->GetType())
- {
- case svSingleRef:
- {
- formula::FormulaToken* pToken = *p;
- ScSingleRefData& rRef = *pToken->GetSingleRef();
- ScAddress aAbs = rRef.toAbs(*mxSheetLimits, rPos);
- if (aAbs.Col() > nMaxCol || aAbs.Row() > nMaxRow)
- return true;
- }
- break;
- case svDoubleRef:
- {
- formula::FormulaToken* pToken = *p;
- ScComplexRefData& rRef = *pToken->GetDoubleRef();
- ScRange aAbs = rRef.toAbs(*mxSheetLimits, rPos);
- // Entire columns/rows are sticky.
- if ( (!rRef.IsEntireCol() && (aAbs.aStart.Row() > nMaxRow || aAbs.aEnd.Row() > nMaxRow)) ||
- (!rRef.IsEntireRow() && (aAbs.aStart.Col() > nMaxCol || aAbs.aEnd.Col() > nMaxCol)))
- return true;
- }
- break;
- default:
- ;
- }
- }
- return false;
-}
-
sal_Int32 ScTokenArray::GetWeight() const
{
sal_Int32 nResult = 0;
diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx
index f1374e2d5c12..d217c9622e06 100644
--- a/sc/source/filter/excel/excform.cxx
+++ b/sc/source/filter/excel/excform.cxx
@@ -121,13 +121,8 @@ void ImportExcel::Formula(
if (pSharedCode)
{
ScFormulaCell* pCell;
- if (pSharedCode->NeedsWrapReference(aScPos, EXC_MAXCOL8, EXC_MAXROW8))
- {
- pCell = new ScFormulaCell(rD, aScPos, pSharedCode->Clone());
- pCell->GetCode()->WrapReference(aScPos, EXC_MAXCOL8, EXC_MAXROW8);
- }
- else
- pCell = new ScFormulaCell(rD, aScPos, *pSharedCode);
+ pCell = new ScFormulaCell(rD, aScPos, pSharedCode->Clone());
+ pCell->GetCode()->WrapReference(aScPos, EXC_MAXCOL8, EXC_MAXROW8);
rDoc.getDoc().EnsureTable(aScPos.Tab());
rDoc.setFormulaCell(aScPos, pCell);
pCell->SetNeedNumberFormat(false);