sc/source/core/tool/interpr5.cxx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
New commits: commit 8f187d38b18f65ed70a225f63869147605fda704 Author: Eike Rathke <er...@redhat.com> Date: Tue Jun 13 13:30:57 2017 +0200 Handle SUMPRODUCT with reference list and array of references, tdf#58874 Note that Excel does not handle this the same, strangely it returns 0 for array of references, not even an error, as if all products involved a 0 somewhere. For reference list (union operator) it returns #VALUE! Change-Id: I4540a4f221518c8991c7fa3cf3f1f08f28a49038 diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index 4e0ee214897c..90c447e59eb8 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -1690,14 +1690,19 @@ public: void ScInterpreter::ScSumProduct() { - sal_uInt8 nParamCount = GetByte(); + short nParamCount = GetByte(); if ( !MustHaveParamCount( nParamCount, 1, 30 ) ) return; + // XXX NOTE: Excel returns #VALUE! for reference list and 0 (why?) for + // array of references. We calculate the proper individual arrays if sizes + // match. + + size_t nInRefList = 0; ScMatrixRef pMatLast; ScMatrixRef pMat; - pMatLast = GetMatrix(); + pMatLast = GetMatrix( --nParamCount, nInRefList); if (!pMatLast) { PushIllegalParameter(); @@ -1709,9 +1714,9 @@ void ScInterpreter::ScSumProduct() std::vector<double> aResArray; pMatLast->GetDoubleArray(aResArray); - for (sal_uInt16 i = 1; i < nParamCount; ++i) + while (nParamCount--) { - pMat = GetMatrix(); + pMat = GetMatrix( nParamCount, nInRefList); if (!pMat) { PushIllegalParameter(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits