sc/source/core/tool/interpr1.cxx |   22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

New commits:
commit a523e9bf2d54fc84583c9da05af592297b055e40
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Fri May 31 17:34:35 2024 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Sat Jun 1 22:21:38 2024 +0200

    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 <er...@redhat.com>

diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 621e3d9ee8a0..b8ece94894b4 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -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)

Reply via email to