[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - sc/source

Eike Rathke erack at redhat.com
Mon Jun 29 12:07:12 PDT 2015


 sc/source/core/tool/interpr1.cxx |   35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

New commits:
commit 48d55a1b6f6ce9e38c9b48dfbbdb7231a7b66d3e
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Jun 29 20:50:53 2015 +0200

    support plain database range (table) names in INDIRECT
    
    Change-Id: I89c1249315059d6a04615de27e8b9b18dfd300ff
    (cherry picked from commit 81b606f547fcfc254e040937519516b98f089241)

diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 568ce1f..e2255ac 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -7095,7 +7095,40 @@ void ScInterpreter::ScIndirect()
             }
             while (false);
 
-            /* TODO: simple named ranges and database ranges could be resolved. */
+            do
+            {
+                OUString aName( ScGlobal::pCharClass->uppercase( sRefStr));
+                ScDBCollection::NamedDBs& rDBs = pDok->GetDBCollection()->getNamedDBs();
+                const ScDBData* pData = rDBs.findByUpperName( aName);
+                if (!pData)
+                    break;
+
+                ScRange aRange;
+                pData->GetArea( aRange);
+
+                // In Excel, specifying a table name without [] resolves to the
+                // same as with [], a range that excludes header and totals
+                // rows and contains only data rows. Do the same.
+                if (pData->HasHeader())
+                    aRange.aStart.IncRow();
+                if (pData->HasTotals())
+                    aRange.aEnd.IncRow(-1);
+
+                if (aRange.aStart.Row() > aRange.aEnd.Row())
+                    break;
+
+                if (aRange.aStart == aRange.aEnd)
+                    PushSingleRef( aRange.aStart.Col(), aRange.aStart.Row(),
+                            aRange.aStart.Tab());
+                else
+                    PushDoubleRef( aRange.aStart.Col(), aRange.aStart.Row(),
+                            aRange.aStart.Tab(), aRange.aEnd.Col(),
+                            aRange.aEnd.Row(), aRange.aEnd.Tab());
+
+                // success!
+                return;
+            }
+            while (false);
 
             // It may be even a TableRef.
             // Anything else that resolves to one reference could be added


More information about the Libreoffice-commits mailing list