summaryrefslogtreecommitdiff
path: root/sc/source/core
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2015-04-22 22:55:34 +0200
committerEike Rathke <erack@redhat.com>2015-04-23 15:18:01 +0200
commite9646512e62b9f74bd82307d054a6739cb4ac0d3 (patch)
tree08b4040af1b2a8c4e69423dfef3a13de8f01391d /sc/source/core
parent97539f5eb1d1f6ba3349bdfcbd71b8256370a783 (diff)
TableRef: create column specifier string from singleref
Change-Id: Iac842f7a44240bf3da3fd2658f1ae05cac85ad7d
Diffstat (limited to 'sc/source/core')
-rw-r--r--sc/source/core/tool/compiler.cxx35
1 files changed, 35 insertions, 0 deletions
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);