diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-26 16:12:07 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-07-30 23:49:56 -0400 |
commit | b9641d174bbb5e95418a601886efcc3369986827 (patch) | |
tree | 3bd00170103343b2ca8bc44e15b4a4cda253c4ec | |
parent | 7af53e4e75556bdea0a1e524a87671e7436cbc97 (diff) |
More of the same.
Change-Id: I29c60f2f7a31b69b224d4c910392c88990b48572
-rw-r--r-- | sc/source/filter/excel/xetable.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/excel/xlformula.cxx | 17 | ||||
-rw-r--r-- | sc/source/filter/inc/xlformula.hxx | 2 | ||||
-rw-r--r-- | sc/source/filter/lotus/tool.cxx | 15 |
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 { |