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 );