summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2015-04-08 19:51:49 +0200
committerEike Rathke <erack@redhat.com>2015-04-08 20:45:48 +0200
commitab060c294ec1f2bf7c59e6ea5edc4b78e006ac10 (patch)
tree92bf347e773671b335f31a3adf44d99d715de14c /sc
parenta83c3227919ea6467cd4eee5464d73b24120a440 (diff)
TableRef: handle column range
Change-Id: Iab87cc3fb2b21b53303e46a227f3a1ae35a3ab6d
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/compiler.cxx20
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)
{