Resolves: tdf#158789 operate on query array if no extra array or range given

Also push error and bail out early if there was an error, or more
important pResultMatrix is nullptr.

Change-Id: I1094ed9d14795ea1bc3f4ff61d687cc28d0b94fb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168300
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
This commit is contained in:
Eike Rathke
2024-06-01 22:21:38 +02:00
parent f9ffaeaf7b
commit a523e9bf2d
+21 -1
View File
@@ -5740,7 +5740,8 @@ void ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
ScMatrixRef pResultMatrix = QueryMat( pQueryMatrix, aOptions);
if (nGlobalError != FormulaError::NONE || !pResultMatrix)
{
SetError( FormulaError::IllegalParameter);
PushIllegalParameter();
return;
}
if (pSumExtraMatrix)
@@ -5764,6 +5765,25 @@ void ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
}
}
}
else if (!bSumExtraRange)
{
for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
{
for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow)
{
if (pResultMatrix->IsValue( nCol, nRow) &&
pResultMatrix->GetDouble( nCol, nRow))
{
if (pQueryMatrix->IsValue( nCol, nRow))
{
fVal = pQueryMatrix->GetDouble( nCol, nRow);
++fCount;
fSum += fVal;
}
}
}
}
}
else
{
for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)