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();

Reply via email to