diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-10-05 22:19:19 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-10-06 02:52:37 +0200 |
commit | df1dc6edd4d5b823ce03b82873f0743453a04c5e (patch) | |
tree | 2c0dca57b39c0eec7e004d84352938764c4719b3 /sc | |
parent | ff33b0be8779977b5ace5e0f52834d46f24e6903 (diff) |
fix for fdo#41381: local range names don't work with INDIRECT
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/rangeutl.hxx | 3 | ||||
-rw-r--r-- | sc/source/core/tool/interpr1.cxx | 7 | ||||
-rw-r--r-- | sc/source/core/tool/rangeutl.cxx | 19 |
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, |