From fdf6777e02f4897bdb798457d3e6b8fbd343f8ab Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Tue, 30 Sep 2025 19:05:23 +0200 Subject: [PATCH] tdf#168589 - sc fix xls import with subtotal function Check if the trimmed data range of Subtotal double references is valid otherwise do not trim. regression after: b89047a0f0100fb30121084cf42815aa792c1f88 (tdf#164843 - sc optimize "SubTotal" function's reference ranges) Change-Id: I5f1fa4f67a685deb4a391e19e3acd9849b03c1b4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191691 Tested-by: Jenkins Reviewed-by: Balazs Varga --- sc/qa/unit/data/xls/tdf168589.xls | Bin 0 -> 5632 bytes sc/qa/unit/subsequent_filters_test5.cxx | 9 +++++++++ sc/source/core/tool/compiler.cxx | 14 +++++++++----- 3 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 sc/qa/unit/data/xls/tdf168589.xls diff --git a/sc/qa/unit/data/xls/tdf168589.xls b/sc/qa/unit/data/xls/tdf168589.xls new file mode 100644 index 0000000000000000000000000000000000000000..103b35f64f6c21679ccc0361ff4fd5d90cf672b3 GIT binary patch literal 5632 zcmeHLU1(fI6h3#eySd{;HQS`E7OV|z#Ucf}*`G9a+k`ZN zia*=hyjf8C;7dUYc@f1Q3i@Ed&4b{Bq9}b(6cXQxA{(hlp~?Dv=icq!-0qT%M5U6m zIWu#=J2U6ZnKNh3%{N~+PG9_}bw)h&u++$WAtXT;ZlG-zpCckZw293Z3WXw!<_g_L z7MOE%txCy)l+zf63 zuLa)$UI)Gt+zMU~z6*RexD9*{n0nmn)NF4=yWM&2aO%>^R$Bjr1wtlvF&L0fSAWTn zud#my9`T`nO8w$zU`J$>zR@4gB&>gn`c#LwLEp^5Nq3-S$OWJc@`0k4wcMfJhfXoE zwxME1a?OaT?&q}Jpk)I}Lq5?lKPb`zzx)FI3$MPRhu}8}7&{UFh9xc;@w}Dgd)wx( zmr35QkETwh#^RZ2JvWo`N5P`{4&^N3R7~+})#0>Ox&D=K&RVYj{}-QxO)W0Zp`x9; zY&+z=_@)YYcLjWN1w3>Me%^;Om6ZbPNVZ1n#%xgQrmSDoWF#Ui&<>swYmuCe347t52 zrwv4WGlvr-W=z^<8RHT2O~if^G2Q$VVgClAJMRn5hC3piJf(k_bV~u3g()$J;$@LA zTfk^I#LI!?9*;M0AahG`-0_! zg;+o_2ykJ+G8mVLw0%K8vkVq0gK>L7I@WUJ@=Et&bPzAbE8mMT1@L0dt}l?m6v5k% zDT5bN$MxvPl)~Gu)wMRRV-9{uo7y%HN>r`s?0~F`=?q9<+CtJE#6{rG`Ez}~!^SIc zP1-oD7a^Z$-LR%We4<^$ngCG(EgDwi@rgRvPru3lTE6^a5CaF!(_wY_*!Zy2GrM|@54v3`xmN}Z5SVLmzv1q8TA{}9gUQ0a)k2@NI= z9K>ViAp==h4RCgem^{(AZ?%*?%-Qx0C&orjjikq|-Ondd8EgAPTMoqsQ<+RkEz~!h zPTSY6J!Z)z%wh{&@<@BYJQik@nS$n?o_PEB>-&#I-hI=Qu8vFJ)9f#SX+^%L;>>Sj zV4CJ}F!S8QV1}ATBEdwygbmC-#D zpC{2q^A@V4KV|r?e0Al*{p%y=--7<#*Wcd-Ea1V80OKLy1W9Il0YTe4j)K0NT?1e{SU;_^x5_|)*prJ SaYz1gR7GetValue(4, 5, 0)); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index cbf61eb55d5c..e3b9fadf79f5 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -6879,17 +6879,21 @@ void ScCompiler::AnnotateTrimOnDoubleRefs() if (pTok->GetType() == svDoubleRef) { ScComplexRefData* pRefData = pTok->GetDoubleRef(); - // no need to set pRefData->SetTrimToData(true); because we already trim here + // do no set pRefData->SetTrimToData(true); because we need to trim here if possible ScRange rRange = pRefData->toAbs(rDoc, aPos); SCCOL nTempStartCol = rRange.aStart.Col(); SCROW nTempStartRow = rRange.aStart.Row(); SCCOL nTempEndCol = rRange.aEnd.Col(); SCROW nTempEndRow = rRange.aEnd.Row(); rDoc.ShrinkToDataArea(rRange.aStart.Tab(), nTempStartCol, nTempStartRow, nTempEndCol, nTempEndRow); - rRange.aStart.Set(nTempStartCol, nTempStartRow, rRange.aStart.Tab()); - rRange.aEnd.Set(nTempEndCol, nTempEndRow, rRange.aEnd.Tab()); - rRange.PutInOrder(); - pRefData->SetRange(rDoc.GetSheetLimits(), rRange, aPos); + // check if range is still valid + if (nTempStartRow <= nTempEndRow && nTempStartCol <= nTempEndCol) + { + rRange.aStart.Set(nTempStartCol, nTempStartRow, rRange.aStart.Tab()); + rRange.aEnd.Set(nTempEndCol, nTempEndRow, rRange.aEnd.Tab()); + if (rRange.IsValid()) + pRefData->SetRange(rDoc.GetSheetLimits(), rRange, aPos); + } } --ppTok; }