summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-10-05 22:19:19 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-10-06 02:52:37 +0200
commitdf1dc6edd4d5b823ce03b82873f0743453a04c5e (patch)
tree2c0dca57b39c0eec7e004d84352938764c4719b3 /sc
parentff33b0be8779977b5ace5e0f52834d46f24e6903 (diff)
fix for fdo#41381: local range names don't work with INDIRECT
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/rangeutl.hxx3
-rw-r--r--sc/source/core/tool/interpr1.cxx7
-rw-r--r--sc/source/core/tool/rangeutl.cxx19
3 files changed, 24 insertions, 5 deletions
diff --git a/sc/inc/rangeutl.hxx b/sc/inc/rangeutl.hxx
index 18d15d5ffe5f..d04b97828d39 100644
--- a/sc/inc/rangeutl.hxx
+++ b/sc/inc/rangeutl.hxx
@@ -271,6 +271,9 @@ public:
::rtl::OUString& rString,
const ::rtl::OUString& rXMLRange,
ScDocument* pDoc );
+
+// String to RangeData core
+ static ScRangeData* GetRangeDataFromString(const rtl::OUString& rString, const SCTAB nTab, const ScDocument* pDoc);
};
//------------------------------------------------------------------------
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 8f5328386483..3fc28bbcea1f 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -69,6 +69,7 @@
#include "cellkeytranslator.hxx"
#include "lookupcache.hxx"
#include "rangenam.hxx"
+#include "rangeutl.hxx"
#include "compiler.hxx"
#include "externalrefmgr.hxx"
#include <basic/sbstar.hxx>
@@ -6715,11 +6716,7 @@ void ScInterpreter::ScIndirect()
{
do
{
- ScRangeName* pNames = pDok->GetRangeName();
- if (!pNames)
- break;
-
- ScRangeData* pData = pNames->findByName(sRefStr);
+ ScRangeData* pData = ScRangeStringConverter::GetRangeDataFromString(sRefStr, nTab, pDok);
if (!pData)
break;
diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx
index 2a0ceb0f9b59..2ced67b341b2 100644
--- a/sc/source/core/tool/rangeutl.cxx
+++ b/sc/source/core/tool/rangeutl.cxx
@@ -1017,6 +1017,25 @@ void ScRangeStringConverter::GetStringFromXMLRangeString( OUString& rString, con
rString = aRetStr.makeStringAndClear();
}
+ScRangeData* ScRangeStringConverter::GetRangeDataFromString(const rtl::OUString& rString, const SCTAB nTab, const ScDocument* pDoc)
+{
+ ScRangeName* pLocalRangeName = pDoc->GetRangeName(nTab);
+ ScRangeData* pData = NULL;
+ if(pLocalRangeName)
+ {
+ pData = pLocalRangeName->findByName(rString);
+ }
+ if (!pData)
+ {
+ ScRangeName* pGlobalRangeName = pDoc->GetRangeName();
+ if (pGlobalRangeName)
+ {
+ pData = pGlobalRangeName->findByName(rString);
+ }
+ }
+ return pData;
+}
+
//========================================================================
ScArea::ScArea( SCTAB tab,