Kaydet (Commit) 333f8a76 authored tarafından Eike Rathke's avatar Eike Rathke

first stab at handling table[] all range

Change-Id: I608cf04cf4b0b991f4a45a868566faeae5be77c9
üst 40c9a46b
...@@ -3931,6 +3931,17 @@ ScTokenArray* ScCompiler::CompileString( const OUString& rFormula ) ...@@ -3931,6 +3931,17 @@ ScTokenArray* ScCompiler::CompileString( const OUString& rFormula )
{ {
static_cast<ScTokenArray*>(pArr)->MergeRangeReference( aPos); static_cast<ScTokenArray*>(pArr)->MergeRangeReference( aPos);
} }
else if (eLastOp == ocDBArea && pNewToken->GetOpCode() == ocTableRefOpen)
{
sal_uInt16 nIdx = pArr->GetLen() - 1;
const FormulaToken* pPrev = pArr->PeekPrev( nIdx);
if (pPrev && pPrev->GetOpCode() == ocDBArea)
{
// pPrev may be dead hereafter.
static_cast<ScTokenArray*>(pArr)->ReplaceToken( 1,
new ScTableRefToken( pPrev->GetIndex(), ScTableRefToken::ALL));
}
}
eLastOp = maRawToken.GetOpCode(); eLastOp = maRawToken.GetOpCode();
if ( bAutoCorrect ) if ( bAutoCorrect )
aCorrectedFormula += aCorrectedSymbol; aCorrectedFormula += aCorrectedSymbol;
...@@ -4664,12 +4675,19 @@ bool ScCompiler::HandleTableRef() ...@@ -4664,12 +4675,19 @@ bool ScCompiler::HandleTableRef()
aRange.aEnd.SetTab(aRange.aStart.Tab()); aRange.aEnd.SetTab(aRange.aStart.Tab());
ScTokenArray* pNew = new ScTokenArray(); ScTokenArray* pNew = new ScTokenArray();
ScTableRefToken::Item eItem = pTR->GetItem(); ScTableRefToken::Item eItem = pTR->GetItem();
bool bGotToken = false;
if (eItem == ScTableRefToken::ALL) if (eItem == ScTableRefToken::ALL)
{ {
ScComplexRefData aRefData; ScComplexRefData aRefData;
aRefData.InitFlags(); aRefData.InitFlags();
aRefData.SetRange(aRange, aPos); aRefData.SetRange(aRange, aPos);
pNew->AddDoubleReference( aRefData ); pNew->AddDoubleReference( aRefData );
// Optional [] (or [#All]) may follow.
if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefOpen)
{
if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefClose)
bGotToken = false; // get next token below
}
} }
else else
{ {
...@@ -4678,7 +4696,7 @@ bool ScCompiler::HandleTableRef() ...@@ -4678,7 +4696,7 @@ bool ScCompiler::HandleTableRef()
} }
PushTokenArray( pNew, true ); PushTokenArray( pNew, true );
pNew->Reset(); pNew->Reset();
return GetToken(); return bGotToken ? true : GetToken();
} }
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment