sc/qa/unit/data/xlsx/tdf143068_top10filter.xlsx |binary sc/qa/unit/subsequent_export-test.cxx | 16 ++++++++++++++++ sc/source/filter/excel/excrecds.cxx | 19 ++++++++++--------- 3 files changed, 26 insertions(+), 9 deletions(-)
New commits: commit 44dd8fe9094ea006867879ed1becf36f0c2d0758 Author: Tünde Tóth <toth.tu...@nisz.hu> AuthorDate: Fri Jul 2 14:19:16 2021 +0200 Commit: Gabor Kelemen <kelemen.gab...@nisz.hu> CommitDate: Wed Sep 1 14:18:01 2021 +0200 tdf#143068 XLSX: fix export of top10 filter condition Top10 filter condition lost after XLSX export. Change-Id: I5f9974e7d73f9ada84e284790c2928547f9ec7e7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118291 Tested-by: Jenkins Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit d79de2a2975db6b34f47b7ccfe8d18692373d6f0) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118808 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> (cherry picked from commit b17df21168796c0b6907200f8600b065d7e602ad) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121424 Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu> Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu> diff --git a/sc/qa/unit/data/xlsx/tdf143068_top10filter.xlsx b/sc/qa/unit/data/xlsx/tdf143068_top10filter.xlsx new file mode 100644 index 000000000000..8626e74e60dc Binary files /dev/null and b/sc/qa/unit/data/xlsx/tdf143068_top10filter.xlsx differ diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index da114d4334d8..c83dd75a6c49 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -287,6 +287,7 @@ public: void testTdf140431(); void testDateStandardfilterXLSX(); void testTdf142929_filterLessThanXLSX(); + void testAutofilterTop10XLSX(); CPPUNIT_TEST_SUITE(ScExportTest); CPPUNIT_TEST(test); @@ -473,6 +474,7 @@ public: CPPUNIT_TEST(testDateStandardfilterXLSX); CPPUNIT_TEST(testTdf142929_filterLessThanXLSX); + CPPUNIT_TEST(testAutofilterTop10XLSX); CPPUNIT_TEST_SUITE_END(); private: @@ -5964,6 +5966,20 @@ void ScExportTest::testTdf142929_filterLessThanXLSX() xDocSh->DoClose(); } +void ScExportTest::testAutofilterTop10XLSX() +{ + ScDocShellRef xDocSh = loadDoc(u"tdf143068_top10filter.", FORMAT_XLSX); + CPPUNIT_ASSERT(xDocSh.is()); + + xmlDocUniquePtr pDoc = XPathHelper::parseExport2(*this, *xDocSh, m_xSFactory, + "xl/worksheets/sheet1.xml", FORMAT_XLSX); + CPPUNIT_ASSERT(pDoc); + assertXPath(pDoc, "//x:autoFilter/x:filterColumn", "colId", "0"); + assertXPath(pDoc, "//x:autoFilter/x:filterColumn/x:top10", "val", "4"); + + xDocSh->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/source/filter/excel/excrecds.cxx b/sc/source/filter/excel/excrecds.cxx index 1ef6f60c6cf4..5773ad65beed 100644 --- a/sc/source/filter/excel/excrecds.cxx +++ b/sc/source/filter/excel/excrecds.cxx @@ -793,7 +793,7 @@ void XclExpAutofilter::WriteBody( XclExpStream& rStrm ) void XclExpAutofilter::SaveXml( XclExpXmlStream& rStrm ) { - if (meType == FilterCondition && !HasCondition()) + if (meType == FilterCondition && !HasCondition() && !HasTop10()) return; sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); @@ -817,14 +817,15 @@ void XclExpAutofilter::SaveXml( XclExpXmlStream& rStrm ) // OOXTODO: XML_filterVal ); } - - rWorksheet->startElement( XML_customFilters, - XML_and, ToPsz((nFlags & EXC_AFFLAG_ANDORMASK) == EXC_AFFLAG_AND) ); - aCond[ 0 ].SaveXml( rStrm ); - aCond[ 1 ].SaveXml( rStrm ); - rWorksheet->endElement( XML_customFilters ); - // OOXTODO: XLM_colorFilter, XML_dynamicFilter, - // XML_extLst, XML_filters, XML_iconFilter, XML_top10 + else + { + rWorksheet->startElement(XML_customFilters, XML_and, + ToPsz((nFlags & EXC_AFFLAG_ANDORMASK) == EXC_AFFLAG_AND)); + aCond[0].SaveXml(rStrm); + aCond[1].SaveXml(rStrm); + rWorksheet->endElement(XML_customFilters); + } + // OOXTODO: XML_dynamicFilter, XML_extLst, XML_filters, XML_iconFilter } break; case BlankValue: