summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-09-24 15:13:44 +0200
committerSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-09-25 11:22:02 +0200
commitd148ed642f2aef2c2cc8615296cc648249a4878d (patch)
treecef3d2c9d1a7b3189e52cbaab03c85d36ff2ca33 /sc
parent360e6b8453acc26880f4f45e6792c2c0e15f0896 (diff)
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.mehrbrodt@allotropia.de>
Diffstat (limited to 'sc')
-rw-r--r--sc/qa/unit/subsequent_export_test2.cxx2
-rw-r--r--sc/source/filter/excel/excrecds.cxx1
-rw-r--r--sc/source/filter/excel/xestyle.cxx42
3 files changed, 24 insertions, 21 deletions
diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx
index 12863985d79e..41a25d2c0312 100644
--- a/sc/qa/unit/subsequent_export_test2.cxx
+++ b/sc/qa/unit/subsequent_export_test2.cxx
@@ -764,7 +764,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 71c62bd86190..a09312d665de 100644
--- a/sc/source/filter/excel/excrecds.cxx
+++ b/sc/source/filter/excel/excrecds.cxx
@@ -855,6 +855,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 0b6d5ae95277..e9eccbfabc05 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -3054,8 +3054,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)
{
@@ -3065,27 +3064,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++;
+ }
}
}