diff options
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/data/xlsx/tdf113013.xlsx | bin | 0 -> 9980 bytes | |||
-rw-r--r-- | sc/qa/unit/subsequent_filters-test.cxx | 26 | ||||
-rw-r--r-- | sc/source/filter/oox/extlstcontext.cxx | 13 |
3 files changed, 35 insertions, 4 deletions
diff --git a/sc/qa/unit/data/xlsx/tdf113013.xlsx b/sc/qa/unit/data/xlsx/tdf113013.xlsx Binary files differnew file mode 100644 index 000000000000..25e6276e7fbb --- /dev/null +++ b/sc/qa/unit/data/xlsx/tdf113013.xlsx diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index 9470f869bcf4..dea5fa845d80 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -107,6 +107,7 @@ public: virtual void tearDown() override; //ods, xls, xlsx filter tests + void testCondFormatFormulaIsXLSX(); void testCondFormatBeginsAndEndsWithXLSX(); void testExtCondFormatXLSX(); void testUpdateCircleInMergedCellODS(); @@ -300,6 +301,7 @@ public: void testDeleteCirclesInRowAndCol(); CPPUNIT_TEST_SUITE(ScFiltersTest); + CPPUNIT_TEST(testCondFormatFormulaIsXLSX); CPPUNIT_TEST(testCondFormatBeginsAndEndsWithXLSX); CPPUNIT_TEST(testExtCondFormatXLSX); CPPUNIT_TEST(testUpdateCircleInMergedCellODS); @@ -537,6 +539,30 @@ void testRangeNameImpl(const ScDocument& rDoc) } +void ScFiltersTest::testCondFormatFormulaIsXLSX() +{ + ScDocShellRef xDocSh = loadDoc(u"tdf113013.", FORMAT_XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to load tdf113013.xlsx", xDocSh.is()); + + ScDocument& rDoc = xDocSh->GetDocument(); + + // "Formula is" condition + ScConditionalFormat* pFormatB1 = rDoc.GetCondFormat(1, 0, 0); + CPPUNIT_ASSERT(pFormatB1); + ScConditionalFormat* pFormatA2 = rDoc.GetCondFormat(0, 1, 0); + CPPUNIT_ASSERT(pFormatA2); + + ScRefCellValue aCellB1(rDoc, ScAddress(1, 0, 0)); + OUString aCellStyleB1 = pFormatB1->GetCellStyle(aCellB1, ScAddress(1, 0, 0)); + CPPUNIT_ASSERT(!aCellStyleB1.isEmpty()); + + ScRefCellValue aCellA2(rDoc, ScAddress(0, 1, 0)); + OUString aCellStyleA2 = pFormatA2->GetCellStyle(aCellA2, ScAddress(0, 1, 0)); + CPPUNIT_ASSERT(!aCellStyleA2.isEmpty()); + + xDocSh->DoClose(); +} + void ScFiltersTest::testCondFormatBeginsAndEndsWithXLSX() { ScDocShellRef xDocSh = loadDoc(u"tdf120749.", FORMAT_XLSX); diff --git a/sc/source/filter/oox/extlstcontext.cxx b/sc/source/filter/oox/extlstcontext.cxx index 53cd7b385100..fda1a0449e5e 100644 --- a/sc/source/filter/oox/extlstcontext.cxx +++ b/sc/source/filter/oox/extlstcontext.cxx @@ -153,26 +153,31 @@ ContextHandlerRef ExtConditionalFormattingContext::onCreateContext(sal_Int32 nEl eOperator = CondFormatBuffer::convertToInternalOperator(aToken); return this; } - else if(aType == "containsText") + else if (aType == "containsText") { eOperator = ScConditionMode::ContainsText; return this; } - else if(aType == "notContainsText") + else if (aType == "notContainsText") { eOperator = ScConditionMode::NotContainsText; return this; } - else if(aType == "beginsWith") + else if (aType == "beginsWith") { eOperator = ScConditionMode::BeginsWith; return this; } - else if(aType == "endsWith") + else if (aType == "endsWith") { eOperator = ScConditionMode::EndsWith; return this; } + else if (aType == "expression") + { + eOperator = ScConditionMode::Direct; + return this; + } else { SAL_WARN("sc", "unhandled XLS14_TOKEN(cfRule) with type: " << aType); |