sc/qa/unit/subsequent_export_test.cxx | 31 +++++++++++++++++++++++++++++++ sc/source/filter/excel/xecontent.cxx | 17 ++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-)
New commits: commit e123c772db8a12a37dfa14370b9db7c220f33ef1 Author: Paris Oplopoios <paris.oplopo...@collabora.com> AuthorDate: Thu Oct 26 14:28:06 2023 +0300 Commit: Paris Oplopoios <parisop...@gmail.com> CommitDate: Sun Oct 29 22:18:41 2023 +0100 sc: Test numeric conditional format text rule exports correctly Change-Id: Ib57ea44912b4cb0be7cbdb127dd7ea6f08ec8392 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158498 Tested-by: Jenkins Reviewed-by: Paris Oplopoios <parisop...@gmail.com> diff --git a/sc/qa/unit/subsequent_export_test.cxx b/sc/qa/unit/subsequent_export_test.cxx index 5f5132c299c2..035709a036ac 100644 --- a/sc/qa/unit/subsequent_export_test.cxx +++ b/sc/qa/unit/subsequent_export_test.cxx @@ -2153,6 +2153,37 @@ CPPUNIT_TEST_FIXTURE(ScExportTest, testSheetProtectionXLSB) CPPUNIT_ASSERT(!pTabProtect->isOptionEnabled(ScTableProtection::SELECT_LOCKED_CELLS)); } +CPPUNIT_TEST_FIXTURE(ScExportTest, testConditionalFormatNumberInTextRule) +{ + createScDoc(); + + ScDocument* pDocument = getScDoc(); + ScAddress aAddress(0, 0, 0); + + auto pFormat = std::make_unique<ScConditionalFormat>(0, pDocument); + ScRange aCondFormatRange(aAddress); + ScRangeList aRangeList(aCondFormatRange); + pFormat->SetRange(aRangeList); + ScCondFormatEntry* pEntry + = new ScCondFormatEntry(ScConditionMode::BeginsWith, "15", "", *pDocument, aAddress, ""); + pFormat->AddEntry(pEntry); + pDocument->AddCondFormat(std::move(pFormat), 0); + + saveAndReload("Calc Office Open XML"); + pDocument = getScDoc(); + + ScConditionalFormat* pCondFormat = pDocument->GetCondFormat(0, 0, 0); + CPPUNIT_ASSERT(pCondFormat); + CPPUNIT_ASSERT_EQUAL(size_t(1), pCondFormat->size()); + const ScFormatEntry* pCondFormatEntry = pCondFormat->GetEntry(0); + CPPUNIT_ASSERT(pCondFormatEntry); + CPPUNIT_ASSERT_EQUAL(ScFormatEntry::Type::Condition, pCondFormatEntry->GetType()); + const ScConditionEntry* pConditionEntry + = static_cast<const ScConditionEntry*>(pCondFormatEntry); + CPPUNIT_ASSERT_EQUAL(ScConditionMode::BeginsWith, pConditionEntry->GetOperation()); + CPPUNIT_ASSERT_EQUAL(OUString("\"15\""), pConditionEntry->GetExpression(aAddress, 0)); +} + namespace { const char* toBorderName(SvxBorderLineStyle eStyle) commit ac0a4b7c22b65325b3502cde3e05e106136c4f5b Author: Paris Oplopoios <paris.oplopo...@collabora.com> AuthorDate: Thu Oct 26 12:35:23 2023 +0300 Commit: Paris Oplopoios <parisop...@gmail.com> CommitDate: Sun Oct 29 22:18:33 2023 +0100 sc: Export conditional formatting expression correctly for text rules Text rules like BeginsWith would discard the expression if it was a number when exporting, which is not what is supposed to happen - as something like a conditional formatting rule BeginsWith "1" should be valid. Change-Id: I2d53754c462403f20b1991fa201184fcab3616a8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158494 Tested-by: Jenkins Reviewed-by: Paris Oplopoios <parisop...@gmail.com> diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index 037e99c408a0..d8d21e360cd6 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -1058,7 +1058,22 @@ void XclExpCFImpl::SaveXml( XclExpXmlStream& rStrm ) // the token array for that std::unique_ptr<ScTokenArray> pTokenArray(mrFormatEntry.CreateFlatCopiedTokenArray(0)); if(pTokenArray->GetLen()) - aText = pTokenArray->FirstToken()->GetString().getString().toUtf8(); + { + formula::StackVar eType = pTokenArray->FirstToken()->GetType(); + switch (eType) + { + case formula::svDouble: + { + aText = OString::number(pTokenArray->FirstToken()->GetDouble()); + break; + } + default: + { + aText = pTokenArray->FirstToken()->GetString().getString().toUtf8(); + break; + } + } + } } sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();