Kaydet (Commit) 8c2173d9 authored tarafından Eike Rathke's avatar Eike Rathke

TableRef: transform to reference if not supported, i.e. for ODFF

Change-Id: I64f751455fbba901bb41f91daaf64ee4878a19b4
üst 6f25c21e
......@@ -1868,6 +1868,44 @@ const FormulaToken* FormulaCompiler::CreateStringFromToken( OUStringBuffer& rBuf
case svIndex:
CreateStringFromIndex( rBuffer, t );
if (t->GetOpCode() == ocTableRef && bAllowArrAdvance && mxSymbols->getSymbol( ocTableRefOpen).isEmpty())
{
// Suppress all TableRef related tokens, the resulting
// range was written by CreateStringFromIndex().
const FormulaToken* p = pArr->PeekNext();
if (p->GetOpCode() == ocTableRefOpen)
{
p = pArr->Next();
int nLevel = 0;
do
{
// Switch cases correspond with those in
// ScCompiler::HandleTableRef()
switch (p->GetOpCode())
{
case ocTableRefOpen:
++nLevel;
break;
case ocTableRefClose:
--nLevel;
break;
case ocTableRefItemAll:
case ocTableRefItemHeaders:
case ocTableRefItemData:
case ocTableRefItemTotals:
case ocTableRefItemThisRow:
case ocSep:
case ocPush:
case ocRange:
case ocSpaces:
break;
default:
nLevel = 0;
bNext = false;
}
} while (nLevel && (p = pArr->Next()));
}
}
break;
case svExternal:
{
......
......@@ -4527,13 +4527,52 @@ void ScCompiler::CreateStringFromIndex( OUStringBuffer& rBuffer, const FormulaTo
}
break;
case ocDBArea:
case ocTableRef:
{
const ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByIndex(_pTokenP->GetIndex());
if (pDBData)
aBuffer.append(pDBData->GetName());
}
break;
case ocTableRef:
{
if (mxSymbols->getSymbol( ocTableRefOpen).isEmpty())
{
// Write the resulting reference if TableRef is not supported.
const ScTableRefToken* pTR = dynamic_cast<const ScTableRefToken*>(_pTokenP);
if (!pTR)
AppendErrorConstant( aBuffer, errNoCode);
else
{
const FormulaToken* pRef = pTR->GetAreaRefRPN();
if (!pRef)
AppendErrorConstant( aBuffer, errNoCode);
else
{
switch (pRef->GetType())
{
case svSingleRef:
CreateStringFromSingleRef( aBuffer, pRef);
break;
case svDoubleRef:
CreateStringFromDoubleRef( aBuffer, pRef);
break;
case svError:
AppendErrorConstant( aBuffer, pRef->GetError());
break;
default:
AppendErrorConstant( aBuffer, errNoCode);
}
}
}
}
else
{
const ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByIndex(_pTokenP->GetIndex());
if (pDBData)
aBuffer.append(pDBData->GetName());
}
}
break;
default:
; // nothing
}
......
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