Kaydet (Commit) df1dc6ed authored tarafından Markus Mohrhard's avatar Markus Mohrhard

fix for fdo#41381: local range names don't work with INDIRECT

üst ff33b0be
...@@ -271,6 +271,9 @@ public: ...@@ -271,6 +271,9 @@ public:
::rtl::OUString& rString, ::rtl::OUString& rString,
const ::rtl::OUString& rXMLRange, const ::rtl::OUString& rXMLRange,
ScDocument* pDoc ); ScDocument* pDoc );
// String to RangeData core
static ScRangeData* GetRangeDataFromString(const rtl::OUString& rString, const SCTAB nTab, const ScDocument* pDoc);
}; };
//------------------------------------------------------------------------ //------------------------------------------------------------------------
......
...@@ -69,6 +69,7 @@ ...@@ -69,6 +69,7 @@
#include "cellkeytranslator.hxx" #include "cellkeytranslator.hxx"
#include "lookupcache.hxx" #include "lookupcache.hxx"
#include "rangenam.hxx" #include "rangenam.hxx"
#include "rangeutl.hxx"
#include "compiler.hxx" #include "compiler.hxx"
#include "externalrefmgr.hxx" #include "externalrefmgr.hxx"
#include <basic/sbstar.hxx> #include <basic/sbstar.hxx>
...@@ -6715,11 +6716,7 @@ void ScInterpreter::ScIndirect() ...@@ -6715,11 +6716,7 @@ void ScInterpreter::ScIndirect()
{ {
do do
{ {
ScRangeName* pNames = pDok->GetRangeName(); ScRangeData* pData = ScRangeStringConverter::GetRangeDataFromString(sRefStr, nTab, pDok);
if (!pNames)
break;
ScRangeData* pData = pNames->findByName(sRefStr);
if (!pData) if (!pData)
break; break;
......
...@@ -1017,6 +1017,25 @@ void ScRangeStringConverter::GetStringFromXMLRangeString( OUString& rString, con ...@@ -1017,6 +1017,25 @@ void ScRangeStringConverter::GetStringFromXMLRangeString( OUString& rString, con
rString = aRetStr.makeStringAndClear(); 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, ScArea::ScArea( SCTAB tab,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment