Kaydet (Commit) 81b606f5 authored tarafından Eike Rathke's avatar Eike Rathke

support plain database range (table) names in INDIRECT

Change-Id: I89c1249315059d6a04615de27e8b9b18dfd300ff
üst beb4aa21
......@@ -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
......
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