sc/qa/unit/data/xlsx/sortconditionref.xlsx |binary sc/qa/unit/subsequent_export_test2.cxx | 17 +++++++++++++++++ sc/source/filter/oox/autofilterbuffer.cxx | 10 ++++------ 3 files changed, 21 insertions(+), 6 deletions(-)
New commits: commit 12b55485b3bbec4ae7041a36a27bcb86ba98911e Author: Gülşah Köse <[email protected]> AuthorDate: Fri Nov 22 14:38:40 2024 +0300 Commit: Szymon Kłos <[email protected]> CommitDate: Fri Nov 29 05:50:54 2024 +0100 tdf#163842 Fix autofilter ascending sort condition reference import if (rSorConditionLoaded.mbDescending) condition ignores the ascending sort. So when we import a document that uses ascending sort then export it, we don't know which column is sorted. With the following patch we fix this case. Signed-off-by: Gülşah Köse <[email protected]> Change-Id: I561146517959a87eb0fb6cec419d68299bcb7eee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177016 Reviewed-by: Szymon Kłos <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177476 diff --git a/sc/qa/unit/data/xlsx/sortconditionref.xlsx b/sc/qa/unit/data/xlsx/sortconditionref.xlsx new file mode 100644 index 000000000000..7aaebcc20471 Binary files /dev/null and b/sc/qa/unit/data/xlsx/sortconditionref.xlsx differ diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx index 4e384336c344..46958234b538 100644 --- a/sc/qa/unit/subsequent_export_test2.cxx +++ b/sc/qa/unit/subsequent_export_test2.cxx @@ -79,6 +79,7 @@ public: void testTdf95640_ods_to_xlsx(); void testTdf95640_ods_to_xlsx_with_standard_list(); void testTdf95640_xlsx_to_xlsx(); + void testSortConditionRef(); void testDateAutofilterXLSX(); void testDateAutofilterODS(); void testAutofilterColorsODF(); @@ -213,6 +214,7 @@ public: CPPUNIT_TEST(testTdf95640_ods_to_xlsx); CPPUNIT_TEST(testTdf95640_ods_to_xlsx_with_standard_list); CPPUNIT_TEST(testTdf95640_xlsx_to_xlsx); + CPPUNIT_TEST(testSortConditionRef); CPPUNIT_TEST(testDateAutofilterXLSX); CPPUNIT_TEST(testDateAutofilterODS); CPPUNIT_TEST(testAutofilterColorsODF); @@ -678,6 +680,21 @@ void ScExportTest2::testTdf95640_xlsx_to_xlsx() "Low,Medium,High"); } +void ScExportTest2::testSortConditionRef() +{ + // Ascending sortCondition reference detected wrong without fix. + // - Expected: B3:B2 + // - Actual : A3:A2 + // - In <>, attribute 'ref' of '//x:worksheet/x:autoFilter/x:sortState/x:sortCondition' incorrect value. + createScDoc("xlsx/sortconditionref.xlsx"); + + save("Calc Office Open XML"); + xmlDocUniquePtr pDoc = parseExport("xl/worksheets/sheet1.xml"); + + assertXPath(pDoc, "//x:worksheet/x:autoFilter", "ref", "B2"); + assertXPath(pDoc, "//x:worksheet/x:autoFilter/x:sortState/x:sortCondition", "ref", "B3:B2"); +} + void ScExportTest2::testDateAutofilterXLSX() { // XLSX Roundtripping autofilter with date list diff --git a/sc/source/filter/oox/autofilterbuffer.cxx b/sc/source/filter/oox/autofilterbuffer.cxx index b7f14d8a2fb2..89c4ad1388f8 100644 --- a/sc/source/filter/oox/autofilterbuffer.cxx +++ b/sc/source/filter/oox/autofilterbuffer.cxx @@ -845,15 +845,13 @@ void AutoFilter::finalizeImport( const Reference< XDatabaseRange >& rxDatabaseRa return; SCCOLROW nStartPos = aParam.bByRow ? maRange.aStart.Col() : maRange.aStart.Row(); + // descending sort - need to enable 1st SortParam slot if (rSorConditionLoaded.mbDescending) - { - // descending sort - need to enable 1st SortParam slot assert(aParam.GetSortKeyCount() == DEFSORT); - aParam.maKeyState[0].bDoSort = true; - aParam.maKeyState[0].bAscending = false; - aParam.maKeyState[0].nField += nStartPos; - } + aParam.maKeyState[0].bDoSort = true; + aParam.maKeyState[0].bAscending = !rSorConditionLoaded.mbDescending; + aParam.maKeyState[0].nField += nStartPos; ScDBData* pDBData = rDoc.GetDBAtArea( nSheet,
