summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-07-26 16:12:07 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-07-30 23:49:56 -0400
commitb9641d174bbb5e95418a601886efcc3369986827 (patch)
tree3bd00170103343b2ca8bc44e15b4a4cda253c4ec
parent7af53e4e75556bdea0a1e524a87671e7436cbc97 (diff)
More of the same.
Change-Id: I29c60f2f7a31b69b224d4c910392c88990b48572
-rw-r--r--sc/source/filter/excel/xetable.cxx2
-rw-r--r--sc/source/filter/excel/xlformula.cxx17
-rw-r--r--sc/source/filter/inc/xlformula.hxx2
-rw-r--r--sc/source/filter/lotus/tool.cxx15
4 files changed, 19 insertions, 17 deletions
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx
index 9ef8202d1ebd..99313ead7c35 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -399,7 +399,7 @@ XclExpTableopRef XclExpTableopBuffer::CreateOrExtendTableop(
// try to extract cell references of a multiple operations formula
XclMultipleOpRefs aRefs;
- if( XclTokenArrayHelper::GetMultipleOpRefs( aRefs, rScTokArr ) )
+ if (XclTokenArrayHelper::GetMultipleOpRefs(aRefs, rScTokArr, rScPos))
{
// try to find an existing TABLEOP record for this cell position
for( size_t nPos = 0, nSize = maTableopList.GetSize(); !xRec && (nPos < nSize); ++nPos )
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 337b97131c70..94d95947f84d 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -780,14 +780,14 @@ const ScTokenArray* XclTokenArrayHelper::GetSharedFormula( const XclRoot& rRoot,
namespace {
-inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken )
+inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken, const ScAddress& rPos )
{
OpCode eOpCode = rToken.GetOpCode();
bool bIsSingleRef = (eOpCode == ocPush) && (rToken.GetType() == svSingleRef);
if( bIsSingleRef )
{
const ScSingleRefData& rRef = static_cast<const ScToken&>(rToken).GetSingleRef();
- rAddress.Set( rRef.nCol, rRef.nRow, rRef.nTab );
+ rAddress = rRef.toAbs(rPos);
bIsSingleRef = !rRef.IsDeleted();
}
return bIsSingleRef;
@@ -795,7 +795,8 @@ inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken )
} // namespace
-bool XclTokenArrayHelper::GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr )
+bool XclTokenArrayHelper::GetMultipleOpRefs(
+ XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr, const ScAddress& rScPos )
{
rRefs.mbDblRefMode = false;
enum
@@ -817,32 +818,32 @@ bool XclTokenArrayHelper::GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScT
eState = (eOpCode == ocOpen) ? stOpen : stError;
break;
case stOpen:
- eState = lclGetAddress( rRefs.maFmlaScPos, *aIt ) ? stFormula : stError;
+ eState = lclGetAddress(rRefs.maFmlaScPos, *aIt, rScPos) ? stFormula : stError;
break;
case stFormula:
eState = bIsSep ? stFormulaSep : stError;
break;
case stFormulaSep:
- eState = lclGetAddress( rRefs.maColFirstScPos, *aIt ) ? stColFirst : stError;
+ eState = lclGetAddress(rRefs.maColFirstScPos, *aIt, rScPos) ? stColFirst : stError;
break;
case stColFirst:
eState = bIsSep ? stColFirstSep : stError;
break;
case stColFirstSep:
- eState = lclGetAddress( rRefs.maColRelScPos, *aIt ) ? stColRel : stError;
+ eState = lclGetAddress(rRefs.maColRelScPos, *aIt, rScPos) ? stColRel : stError;
break;
case stColRel:
eState = bIsSep ? stColRelSep : ((eOpCode == ocClose) ? stClose : stError);
break;
case stColRelSep:
- eState = lclGetAddress( rRefs.maRowFirstScPos, *aIt ) ? stRowFirst : stError;
+ eState = lclGetAddress(rRefs.maRowFirstScPos, *aIt, rScPos) ? stRowFirst : stError;
rRefs.mbDblRefMode = true;
break;
case stRowFirst:
eState = bIsSep ? stRowFirstSep : stError;
break;
case stRowFirstSep:
- eState = lclGetAddress( rRefs.maRowRelScPos, *aIt ) ? stRowRel : stError;
+ eState = lclGetAddress(rRefs.maRowRelScPos, *aIt, rScPos) ? stRowRel : stError;
break;
case stRowRel:
eState = (eOpCode == ocClose) ? stClose : stError;
diff --git a/sc/source/filter/inc/xlformula.hxx b/sc/source/filter/inc/xlformula.hxx
index 77687691024e..fdf395e7e229 100644
--- a/sc/source/filter/inc/xlformula.hxx
+++ b/sc/source/filter/inc/xlformula.hxx
@@ -537,7 +537,7 @@ public:
@descr Requires that the formula contains a single MULTIPLE.OPERATION function call.
Spaces in the formula are silently ignored.
@return true = Multiple operation found, and all references successfully extracted. */
- static bool GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr );
+ static bool GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr, const ScAddress& rScPos );
};
// ----------------------------------------------------------------------------
diff --git a/sc/source/filter/lotus/tool.cxx b/sc/source/filter/lotus/tool.cxx
index 020b58228f50..3fc0c6e343f4 100644
--- a/sc/source/filter/lotus/tool.cxx
+++ b/sc/source/filter/lotus/tool.cxx
@@ -465,16 +465,16 @@ void LotusRangeList::Append( LotusRange* pLR, const String& rName )
ScSingleRefData* pSingRef = &aComplRef.Ref1;
- pSingRef->nCol = pLR->nColStart;
- pSingRef->nRow = pLR->nRowStart;
+ pSingRef->SetAbsCol(pLR->nColStart);
+ pSingRef->SetAbsRow(pLR->nRowStart);
if( pLR->IsSingle() )
aTokArray.AddSingleReference( *pSingRef );
else
{
pSingRef = &aComplRef.Ref2;
- pSingRef->nCol = pLR->nColEnd;
- pSingRef->nRow = pLR->nRowEnd;
+ pSingRef->SetAbsCol(pLR->nColEnd);
+ pSingRef->SetAbsRow(pLR->nRowEnd);
aTokArray.AddDoubleReference( aComplRef );
}
@@ -515,11 +515,12 @@ void RangeNameBufferWK3::Add( const String& rOrgName, const ScComplexRefData& rC
const ScSingleRefData& rRef1 = rCRD.Ref1;
const ScSingleRefData& rRef2 = rCRD.Ref2;
-
- if( rRef1.nCol == rRef2.nCol && rRef1.nRow == rRef2.nRow && rRef1.nTab == rRef2.nTab )
+ ScAddress aAbs1 = rRef1.toAbs(ScAddress());
+ ScAddress aAbs2 = rRef2.toAbs(ScAddress());
+ if (aAbs1 == aAbs2)
{
pScTokenArray->AddSingleReference( rCRD.Ref1 );
- aInsert.bSingleRef = sal_True;
+ aInsert.bSingleRef = true;
}
else
{