sc/source/ui/view/tabvwsh4.cxx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
New commits: commit 0c22a0dd8d2c747a476137ecf2f7cc83e68eb680 Author: Noel Grandin <[email protected]> AuthorDate: Thu Jan 29 21:57:59 2026 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Fri Jan 30 06:55:35 2026 +0100 tdf#166121 speed up de-duplication by merge deletes apply the same logic as commit 1b5b22902e22a24f2782057ec2598b0370aeccad but to columns this time. Change-Id: I3bcd5f11640aa8349b8f4d983d113810f63c6a53 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198379 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index d503fba5949a..626459e1a03f 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -2112,8 +2112,10 @@ void ScTabViewShell::HandleDuplicateRecordsRemove(const rtl::Reference<ScTableSh { std::vector<uno::Sequence<uno::Any>> aUnionArray; sal_uInt32 nDeleteCount = 0; - sal_uInt32 nColumn = bIncludesHeaders ? 1 : 0; - sal_uInt32 lColumns = aDataArray[0].getLength(); + SCCOL nColumn = bIncludesHeaders ? 1 : 0; + SCCOL lColumns = aDataArray[0].getLength(); + SCCOL nPrevColDeleted = -1; + std::vector<table::CellRangeAddress> aDelRanges; while (nColumn < lColumns) { @@ -2124,10 +2126,16 @@ void ScTabViewShell::HandleDuplicateRecordsRemove(const rtl::Reference<ScTableSh if (lcl_CheckInArrayCols(aUnionArray, aSeq, rSelectedEntries)) { - table::CellRangeAddress aCellRange(aRange.Sheet, - aRange.StartColumn + nColumn - nDeleteCount, aRange.StartRow, - aRange.StartColumn + nColumn - nDeleteCount, aRange.EndRow); - ActiveSheet->removeRange(aCellRange, sheet::CellDeleteMode_LEFT); + if (nPrevColDeleted + 1 == nColumn) + aDelRanges.back().EndColumn++; + else + { + table::CellRangeAddress aCellRange(aRange.Sheet, + aRange.StartColumn + nColumn - nDeleteCount, aRange.StartRow, + aRange.StartColumn + nColumn - nDeleteCount, aRange.EndRow); + aDelRanges.push_back(aCellRange); + } + nPrevColDeleted = nColumn; ++nDeleteCount; } else @@ -2136,7 +2144,8 @@ void ScTabViewShell::HandleDuplicateRecordsRemove(const rtl::Reference<ScTableSh } ++nColumn; } - + for (const table::CellRangeAddress & rRange : aDelRanges) + ActiveSheet->removeRange(rRange, sheet::CellDeleteMode_LEFT); } }
