sc/qa/unit/data/xlsx/sortconditionref.xlsx |binary
 sc/qa/unit/subsequent_export_test2.cxx     |   15 +++++++++++++++
 sc/source/filter/oox/autofilterbuffer.cxx  |   10 ++++------
 3 files changed, 19 insertions(+), 6 deletions(-)

New commits:
commit d902401452d85db0c320401335b5170dfa5f6c51
Author:     Gülşah Köse <gulsah.k...@collabora.com>
AuthorDate: Fri Nov 22 14:38:40 2024 +0300
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Nov 26 08:57:48 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 <gulsah.k...@collabora.com>
    Change-Id: I561146517959a87eb0fb6cec419d68299bcb7eee
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177016
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177222
    Tested-by: Jenkins

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 ca0effbea1e1..43226bb14e9f 100644
--- a/sc/qa/unit/subsequent_export_test2.cxx
+++ b/sc/qa/unit/subsequent_export_test2.cxx
@@ -401,6 +401,21 @@ CPPUNIT_TEST_FIXTURE(ScExportTest2, 
testTdf95640_xlsx_to_xlsx)
                 u"Low,Medium,High");
 }
 
+CPPUNIT_TEST_FIXTURE(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(u"Calc Office Open XML"_ustr);
+    xmlDocUniquePtr pDoc = parseExport(u"xl/worksheets/sheet1.xml"_ustr);
+
+    assertXPath(pDoc, "//x:worksheet/x:autoFilter", "ref", u"B2");
+    assertXPath(pDoc, 
"//x:worksheet/x:autoFilter/x:sortState/x:sortCondition", "ref", u"B3:B2");
+}
+
 CPPUNIT_TEST_FIXTURE(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 2aaeae049be1..1d7b7ffb0d70 100644
--- a/sc/source/filter/oox/autofilterbuffer.cxx
+++ b/sc/source/filter/oox/autofilterbuffer.cxx
@@ -847,15 +847,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,

Reply via email to