tdf#77517 make Calc function ROW accept external references.

Change-Id: Ibd4f858abe825652c3df68ce7a21cbf16feea735
Reviewed-on: https://gerrit.libreoffice.org/55824
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 712c053..a04aadcc 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -4339,7 +4339,7 @@ void ScInterpreter::ScRow()
    sal_uInt8 nParamCount = GetByte();
    if ( MustHaveParamCount( nParamCount, 0, 1 ) )
    {
        double nVal = 0;
        double nVal = 0.0;
        if (nParamCount == 0)
        {
            nVal = aPos.Row() + 1;
@@ -4378,15 +4378,39 @@ void ScInterpreter::ScRow()
                    nVal = static_cast<double>(nRow1 + 1);
                }
                break;
                case svDoubleRef :
                case svExternalSingleRef :
                {
                    SCCOL nCol1;
                    sal_uInt16 nFileId;
                    OUString aTabName;
                    ScSingleRefData aRef;
                    PopExternalSingleRef( nFileId, aTabName, aRef );
                    ScAddress aAbsRef = aRef.toAbs( aPos );
                    nVal = static_cast<double>( aAbsRef.Row() + 1 );
                }
                break;
                case svDoubleRef :
                case svExternalDoubleRef :
                {
                    SCROW nRow1;
                    SCTAB nTab1;
                    SCCOL nCol2;
                    SCROW nRow2;
                    SCTAB nTab2;
                    PopDoubleRef( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
                    if ( GetStackType() == svDoubleRef )
                    {
                        SCCOL nCol1;
                        SCTAB nTab1;
                        SCCOL nCol2;
                        SCTAB nTab2;
                        PopDoubleRef( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
                    }
                    else
                    {
                        sal_uInt16 nFileId;
                        OUString aTabName;
                        ScComplexRefData aRef;
                        PopExternalDoubleRef( nFileId, aTabName, aRef );
                        ScRange aAbs = aRef.toAbs( aPos );
                        nRow1 = aAbs.aStart.Row();
                        nRow2 = aAbs.aEnd.Row();
                    }
                    if (nRow2 > nRow1)
                    {
                        ScMatrixRef pResMat = GetNewMat( 1,
@@ -4399,8 +4423,6 @@ void ScInterpreter::ScRow()
                            PushMatrix(pResMat);
                            return;
                        }
                        else
                            nVal = 0.0;
                    }
                    else
                        nVal = static_cast<double>(nRow1 + 1);
@@ -4408,7 +4430,6 @@ void ScInterpreter::ScRow()
                break;
                default:
                    SetError( FormulaError::IllegalParameter );
                    nVal = 0.0;
            }
        }
        PushDouble( nVal );