diff options
author | Eike Rathke <erack@redhat.com> | 2015-04-08 19:51:49 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-04-08 20:45:48 +0200 |
commit | ab060c294ec1f2bf7c59e6ea5edc4b78e006ac10 (patch) | |
tree | 92bf347e773671b335f31a3adf44d99d715de14c /sc | |
parent | a83c3227919ea6467cd4eee5464d73b24120a440 (diff) |
TableRef: handle column range
Change-Id: Iab87cc3fb2b21b53303e46a227f3a1ae35a3ab6d
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 791a9a3b7481..30f1c5ac7959 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4922,14 +4922,28 @@ bool ScCompiler::HandleTableRef() { if (bColumnRange) { + bGotToken = false; // obtain at least a close hereafter // Limit range to specified columns. ScRange aColRange( ScAddress::INITIALIZE_INVALID ); switch (mpToken->GetType()) { case svSingleRef: { - ScAddress aRef( mpToken->GetSingleRef()->toAbs( aPos)); - aColRange.aStart = aColRange.aEnd = aRef; + aColRange.aStart = aColRange.aEnd = mpToken->GetSingleRef()->toAbs( aPos); + if ( (bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefClose && + (bGotToken = GetToken()) && mpToken->GetOpCode() == ocRange && + (bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefOpen && + (bGotToken = GetToken()) && mpToken->GetOpCode() == ocPush) + { + if (mpToken->GetType() != svSingleRef) + aColRange = ScRange( ScAddress::INITIALIZE_INVALID); + else + { + bGotToken = false; // obtain at least a close hereafter + aColRange.aEnd = mpToken->GetSingleRef()->toAbs( aPos); + aColRange.Justify(); + } + } } break; case svDoubleRef: @@ -4959,7 +4973,7 @@ bool ScCompiler::HandleTableRef() { SetError( errNoRef); } - if (bColumnRange) + if (bColumnRange && !bGotToken) { if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefClose) { |