summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/qa/unit/data/ods/tdf142578.odsbin0 -> 10954 bytes
-rw-r--r--sc/qa/unit/subsequent_export-test2.cxx41
-rw-r--r--sc/source/filter/excel/xestyle.cxx15
3 files changed, 48 insertions, 8 deletions
diff --git a/sc/qa/unit/data/ods/tdf142578.ods b/sc/qa/unit/data/ods/tdf142578.ods
new file mode 100644
index 000000000000..0fb6e07d5e4b
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf142578.ods
Binary files differ
diff --git a/sc/qa/unit/subsequent_export-test2.cxx b/sc/qa/unit/subsequent_export-test2.cxx
index 0518cd11c154..cc266e5a2bc0 100644
--- a/sc/qa/unit/subsequent_export-test2.cxx
+++ b/sc/qa/unit/subsequent_export-test2.cxx
@@ -201,6 +201,7 @@ public:
void testTdf143220XLSX();
void testTdf142264ManyChartsToXLSX();
void testTdf143929MultiColumnToODS();
+ void testTdf142578();
CPPUNIT_TEST_SUITE(ScExportTest2);
@@ -303,6 +304,7 @@ public:
CPPUNIT_TEST(testTdf143220XLSX);
CPPUNIT_TEST(testTdf142264ManyChartsToXLSX);
CPPUNIT_TEST(testTdf143929MultiColumnToODS);
+ CPPUNIT_TEST(testTdf142578);
CPPUNIT_TEST_SUITE_END();
@@ -2625,6 +2627,45 @@ void ScExportTest2::testTdf143929MultiColumnToODS()
"column-gap");
}
+void ScExportTest2::testTdf142578()
+{
+ ScDocShellRef xDocSh = loadDoc(u"tdf142578.", FORMAT_ODS);
+ CPPUNIT_ASSERT(xDocSh);
+
+ std::shared_ptr<utl::TempFile> pXPathFile
+ = ScBootstrapFixture::exportTo(&(*xDocSh), FORMAT_XLSX);
+ xmlDocUniquePtr pSheet
+ = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet1.xml");
+ CPPUNIT_ASSERT(pSheet);
+
+ // Get DxfId for color filter
+ sal_Int32 nDxfIdColorFilter
+ = getXPath(pSheet, "/x:worksheet/x:autoFilter/x:filterColumn/x:colorFilter", "dxfId")
+ .toInt32()
+ + 1;
+
+ // Get DxfId for conditional formatting
+ sal_Int32 nDxfIdCondFormat
+ = getXPath(pSheet, "/x:worksheet/x:conditionalFormatting/x:cfRule", "dxfId").toInt32() + 1;
+
+ // Ensure they are using different dxfs
+ CPPUNIT_ASSERT_MESSAGE("dxfID's should be different!", nDxfIdColorFilter != nDxfIdCondFormat);
+
+ // Check colors used by these dxfs
+ xmlDocUniquePtr pStyles = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/styles.xml");
+ CPPUNIT_ASSERT(pStyles);
+
+ OString sDxfColorFilterXPath("/x:styleSheet/x:dxfs/x:dxf[" + OString::number(nDxfIdColorFilter)
+ + "]/x:fill/x:patternFill/x:fgColor");
+ assertXPath(pStyles, sDxfColorFilterXPath, "rgb", "FF81D41A");
+
+ OString sDxfCondFormatXPath("/x:styleSheet/x:dxfs/x:dxf[" + OString::number(nDxfIdCondFormat)
+ + "]/x:fill/x:patternFill/x:bgColor");
+ assertXPath(pStyles, sDxfCondFormatXPath, "rgb", "FFFFCCCC");
+
+ xDocSh->DoClose();
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest2);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 627cc93b7a6c..243560cf494b 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 nColorIndex = 0;
- sal_Int32 nCondFormattingIndex = 0;
+ sal_Int32 nDxfId = 0;
for(SCTAB nTab = 0; nTab < nTables; ++nTab)
{
// Color filters
@@ -3073,21 +3072,21 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
// Does not matter it is text color or cell background color
for (auto& rColor : aFilterEntries.getBackgroundColors())
{
- if (!maColorToDxfId.emplace(rColor, nColorIndex).second)
+ if (!maColorToDxfId.emplace(rColor, nDxfId).second)
continue;
std::unique_ptr<XclExpCellArea> pExpCellArea(new XclExpCellArea(rColor, 0));
maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, std::move(pExpCellArea)));
- nColorIndex++;
+ nDxfId++;
}
for (auto& rColor : aFilterEntries.getTextColors())
{
- if (!maColorToDxfId.emplace(rColor, nColorIndex).second)
+ if (!maColorToDxfId.emplace(rColor, nDxfId).second)
continue;
std::unique_ptr<XclExpCellArea> pExpCellArea(new XclExpCellArea(rColor, 0));
maDxf.push_back(std::make_unique<XclExpDxf>(rRoot, std::move(pExpCellArea)));
- nColorIndex++;
+ nDxfId++;
}
}
}
@@ -3121,7 +3120,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
aStyleName = pEntry->GetStyleName();
}
- if (maStyleNameToDxfId.emplace(aStyleName, nCondFormattingIndex).second)
+ if (maStyleNameToDxfId.emplace(aStyleName, nDxfId).second)
{
SfxStyleSheetBase* pStyle = rRoot.GetDoc().GetStyleSheetPool()->Find(aStyleName, SfxStyleFamily::Para);
if(!pStyle)
@@ -3166,7 +3165,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
maDxf.push_back(std::make_unique<XclExpDxf>( rRoot, std::move(pAlign), std::move(pBorder),
std::move(pFont), std::move(pNumFormat), std::move(pCellProt), std::move(pColor) ));
- ++nCondFormattingIndex;
+ ++nDxfId;
}
}