summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2015-04-18 00:27:28 +0200
committerEike Rathke <erack@redhat.com>2015-04-18 00:46:08 +0200
commit8c2173d95c8fd626c5399144d5820a791147bdbf (patch)
tree889a344c9085889236fb9f9816c292ada85e5746 /sc
parent6f25c21eb5cf311d828b77e602a17390af19c962 (diff)
TableRef: transform to reference if not supported, i.e. for ODFF
Change-Id: I64f751455fbba901bb41f91daaf64ee4878a19b4
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/compiler.cxx41
1 files changed, 40 insertions, 1 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 2e1ee10645c3..64b566ca3a4a 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -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
}