sc/source/core/data/dociter.cxx | 22 ++++++++++++++-------- sc/source/core/tool/interpr4.cxx | 5 +++++ 2 files changed, 19 insertions(+), 8 deletions(-)
New commits: commit 53dcc323db200ba440f5cdb054bce8bd126b4185 Author: Eike Rathke <er...@redhat.com> Date: Wed Feb 11 23:44:00 2015 +0100 Resolves: tdf#39316 add matrix empty cells to ScInterpreter::QueryMatrixType() (only partial cherry-pick, ScMatrix::IsEmptyResult needs newer mdds) (cherry picked from commit eccbc97c7c224269fe261b8924e7866c3758ec91) Change-Id: Ifa5d59e90afcfff66f2e8683fac2a9090ed615da diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 7d7e5b9575c2..2995a6e18c65 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -1849,6 +1849,11 @@ void ScInterpreter::QueryMatrixType(ScMatrixRef& xMat, short& rRetTypeExpr, sal_ PushTempToken( new ScMatrixCellResultToken( xMat, xRes.get())); rRetTypeExpr = NUMBERFORMAT_LOGICAL; } + else if ( xMat->IsEmpty( 0, 0)) + { // empty or empty cell + FormulaTokenRef xRes = new ScEmptyCellToken( false, true); // not inherited, display empty + PushTempToken( new ScMatrixCellResultToken( xMat, xRes.get())); + } else { String aStr( nMatVal.GetString()); commit 0f420e946b48cb5fea0302f6fbfbded3f6d50560 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Apr 3 16:36:11 2017 +0200 tdf#35636: Apply algorithm also to ranges spanning multiple columns Change-Id: I6e574f2237dd6d4dcf4438a9fdafadb66aa049c5 diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index d31f17038b26..16c6d1fee94f 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -57,8 +57,16 @@ namespace rStr = ScGlobal::pCharClass->uppercase(rStr.trim()); } - void lcl_FillBlankCells( std::vector<ColEntry> &rSrcCols, std::vector<ColEntry> &rDestCols, SCROW nLastRow ) + void lcl_FillBlankCells( std::vector<ColEntry> &rSrcCols, std::vector<ColEntry> &rDestCols, SCROW nLastRow, bool bMatchEmpty ) { + rDestCols.clear(); + + if (!bMatchEmpty) + { + rDestCols = rSrcCols; + return; + } + for( SCROW i = 0, n = 0; i <= nLastRow; ++i ) { rDestCols.push_back(ColEntry()); @@ -1214,13 +1222,8 @@ bool ScQueryCellIterator::GetThis() bool bMatchEmpty = ( rItem.mbMatchEmpty && rEntry.GetQueryItems().size() == 1 ); std::vector<ColEntry> rColItems; - if ( !bMatchEmpty ) - rColItems = pCol->maItems; - else - { - SCROW nLastRow = pCol->maItems.back().nRow; - lcl_FillBlankCells( pCol->maItems, rColItems, std::max(nLastRow, mpParam->nRow2) ); - } + SCROW nLastRow = pCol->GetLastDataPos(); + lcl_FillBlankCells( pCol->maItems, rColItems, std::max(nLastRow, mpParam->nRow2), bMatchEmpty ); for ( ;; ) { @@ -1238,7 +1241,10 @@ bool ScQueryCellIterator::GetThis() AdvanceQueryParamEntryField(); nFirstQueryField = rEntry.nField; } + pCol = &(pDoc->maTabs[nTab])->aCol[nCol]; + nLastRow = pCol->GetLastDataPos(); + lcl_FillBlankCells( pCol->maItems, rColItems, std::max(nLastRow, mpParam->nRow2), bMatchEmpty ); } while ( pCol->maItems.empty() ); pCol->Search( nRow, nColRow ); bFirstStringIgnore = bIgnoreMismatchOnLeadingStrings && _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits