From e9646512e62b9f74bd82307d054a6739cb4ac0d3 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Wed, 22 Apr 2015 22:55:34 +0200 Subject: TableRef: create column specifier string from singleref Change-Id: Iac842f7a44240bf3da3fd2658f1ae05cac85ad7d --- sc/source/core/tool/compiler.cxx | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'sc') diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 19d2cfc8c92e..19a073983825 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4476,8 +4476,36 @@ void ScCompiler::CreateStringFromMatrix( OUStringBuffer& rBuffer, const FormulaT rBuffer.append( mxSymbols->getSymbol(ocArrayClose) ); } +namespace { +void escapeTableRefColumnSpecifier( OUString& rStr ) +{ + const sal_Int32 n = rStr.getLength(); + OUStringBuffer aBuf( n * 2 ); + const sal_Unicode* p = rStr.getStr(); + const sal_Unicode* const pStop = p + n; + for ( ; p < pStop; ++p) + { + const sal_Unicode c = *p; + switch (c) + { + case '\'': + case '[': + case '#': + case ']': + aBuf.append( '\'' ); + break; + default: + ; // nothing + } + aBuf.append( c ); + } + rStr = aBuf.makeStringAndClear(); +} +} + void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const FormulaToken* _pTokenP ) const { + const FormulaToken* p; OUString aErrRef = GetCurrentOpCodeMap()->getSymbol(ocErrRef); const OpCode eOp = _pTokenP->GetOpCode(); const ScSingleRefData& rRef = *_pTokenP->GetSingleRef(); @@ -4499,6 +4527,13 @@ void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const Formu GetSetupTabNames(), aRef, true); } } + else if ((p = pArr->PeekPrevNoSpaces()) && p->GetOpCode() == ocTableRefOpen) + { + ScAddress aAbs = rRef.toAbs(aPos); + OUString aStr = pDoc->GetString(aAbs); + escapeTableRefColumnSpecifier( aStr); + rBuffer.append(aStr); + } else pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, GetSetupTabNames(), aRef, true); -- cgit