Resolves: tdf#113541 handle external reference in Excel syntax

... not only OOXML. This wasn't only a problem when creating a
reference by clicking or travelling to a cell in the external
document, but also when editing an external reference in Excel_A1
or Excel_R1C1 reference syntax.

Change-Id: Iee3d529ff9834e5013a61c2056238277f33356fe
Reviewed-on: https://gerrit.libreoffice.org/73979
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit 69903b5c5f9b9015c88931c0eb8a47b52ea3de12)
Reviewed-on: https://gerrit.libreoffice.org/73988
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 7ed3845..edb4f9f 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -2125,11 +2125,14 @@ Label_MaskStateMachine:
                }
                else if( nMask & ScCharFlags::Char )
                {
                    // '[' is a special case in OOXML, it can start an external
                    // reference ID like [1]Sheet1!A1 that needs to be scanned
                    // '[' is a special case in Excel syntax, it can start an
                    // external reference, ID in OOXML like [1]Sheet1!A1 or
                    // Excel_A1 [filename]Sheet!A1 or Excel_R1C1
                    // [filename]Sheet!R1C1 that needs to be scanned
                    // entirely, or can be ocTableRefOpen, of which the first
                    // transforms an ocDBArea into an ocTableRef.
                    if (c == '[' && FormulaGrammar::isOOXML( meGrammar) && eLastOp != ocDBArea && maTableRefs.empty())
                    if (c == '[' && FormulaGrammar::isExcelSyntax( meGrammar)
                            && eLastOp != ocDBArea && maTableRefs.empty())
                    {
                        nMask &= ~ScCharFlags::Char;
                        goto Label_MaskStateMachine;