sc/qa/unit/subsequent_export-test2.cxx |    2 -
 sc/source/filter/excel/excrecds.cxx    |    1 
 sc/source/filter/excel/xestyle.cxx     |   42 +++++++++++++++++----------------
 3 files changed, 24 insertions(+), 21 deletions(-)

New commits:
commit 9c2bf889bdd8d83b58996b8fdc6727fec75cdcd3
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Fri Sep 24 15:13:44 2021 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Mon Sep 27 13:03:47 2021 +0200

    tdf#76258 Fix xlsx export of color filter colors
    
    Change-Id: I08bd46fe10a8fc35a9c2a87745ee3e8cb4c676d5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116648
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    (cherry picked from commit d148ed642f2aef2c2cc8615296cc648249a4878d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122603
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/qa/unit/subsequent_export-test2.cxx 
b/sc/qa/unit/subsequent_export-test2.cxx
index 77e4bc37673e..dde758e2bd5b 100644
--- a/sc/qa/unit/subsequent_export-test2.cxx
+++ b/sc/qa/unit/subsequent_export-test2.cxx
@@ -734,7 +734,7 @@ void ScExportTest2::testAutofilterColorsOOXML()
                                                      "xl/tables/table1.xml", 
FORMAT_XLSX);
     CPPUNIT_ASSERT(pDoc);
 
-    assertXPath(pDoc, "/x:table/x:autoFilter/x:filterColumn/x:colorFilter", 
"dxfId", "4");
+    assertXPath(pDoc, "/x:table/x:autoFilter/x:filterColumn/x:colorFilter", 
"dxfId", "5");
 }
 
 void ScExportTest2::testAutofilterColorsStyleOOXML()
diff --git a/sc/source/filter/excel/excrecds.cxx 
b/sc/source/filter/excel/excrecds.cxx
index 8ce820bb2389..e0aec39a5173 100644
--- a/sc/source/filter/excel/excrecds.cxx
+++ b/sc/source/filter/excel/excrecds.cxx
@@ -854,6 +854,7 @@ void XclExpAutofilter::SaveXml( XclExpXmlStream& rStrm )
                     nDxfId = GetDxfs().GetDxfByBackColor(color);
                 else
                     nDxfId = GetDxfs().GetDxfByForeColor(color);
+                nDxfId++; // Count is 1-based
                 rWorksheet->singleElement(XML_colorFilter, XML_dxfId, 
OString::number(nDxfId));
             }
         }
diff --git a/sc/source/filter/excel/xestyle.cxx 
b/sc/source/filter/excel/xestyle.cxx
index df4afbaf5eca..8abd140e2b9f 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -3053,8 +3053,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
     xFormatter->FillKeywordTableForExcel( *mpKeywordTable );
 
     SCTAB nTables = rRoot.GetDoc().GetTableCount();
-    sal_Int32 nForeColorIndex = 0;
-    sal_Int32 nBackColorIndex = 0;
+    sal_Int32 nColorIndex = 0;
     sal_Int32 nCondFormattingIndex = 0;
     for(SCTAB nTab = 0; nTab < nTables; ++nTab)
     {
@@ -3064,27 +3063,30 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
         {
             ScRange aRange;
             pData->GetArea(aRange);
-            ScFilterEntries aFilterEntries;
-            rRoot.GetDoc().GetFilterEntriesArea(aRange.aStart.Col(), 
aRange.aStart.Row(),
-                                                aRange.aEnd.Row(), nTab, true, 
aFilterEntries);
-
-            for (auto& rColor : aFilterEntries.getBackgroundColors())
+            for (auto nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); 
nCol++)
             {
-                if (!maBackColorToDxfId.emplace(rColor, 
nBackColorIndex).second)
-                    continue;
+                ScFilterEntries aFilterEntries;
+                rRoot.GetDoc().GetFilterEntriesArea(nCol, aRange.aStart.Row(),
+                                                    aRange.aEnd.Row(), nTab, 
true, aFilterEntries);
 
-                std::unique_ptr<XclExpCellArea> pExpCellArea(new 
XclExpCellArea(0, rColor));
-                maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, 
std::move(pExpCellArea)));
-                nBackColorIndex++;
-            }
-            for (auto& rColor : aFilterEntries.getTextColors())
-            {
-                if (!maForeColorToDxfId.emplace(rColor, 
nForeColorIndex).second)
-                    continue;
+                for (auto& rColor : aFilterEntries.getBackgroundColors())
+                {
+                    if (!maBackColorToDxfId.emplace(rColor, 
nColorIndex).second)
+                        continue;
 
-                std::unique_ptr<XclExpCellArea> pExpCellArea(new 
XclExpCellArea(rColor, 0));
-                maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, 
std::move(pExpCellArea)));
-                nForeColorIndex++;
+                    std::unique_ptr<XclExpCellArea> pExpCellArea(new 
XclExpCellArea(0, rColor));
+                    maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, 
std::move(pExpCellArea)));
+                    nColorIndex++;
+                }
+                for (auto& rColor : aFilterEntries.getTextColors())
+                {
+                    if (!maForeColorToDxfId.emplace(rColor, 
nColorIndex).second)
+                        continue;
+
+                    std::unique_ptr<XclExpCellArea> pExpCellArea(new 
XclExpCellArea(rColor, 0));
+                    maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, 
std::move(pExpCellArea)));
+                    nColorIndex++;
+                }
             }
         }
 

Reply via email to