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 eb889e467d64e4d131604744fe6d165bd2d9304a
Author:     Paris Oplopoios <paris.oplopo...@collabora.com>
AuthorDate: Thu Oct 26 14:28:06 2023 +0300
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Tue Oct 31 09:35:04 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>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158647

diff --git a/sc/qa/unit/subsequent_export_test.cxx 
b/sc/qa/unit/subsequent_export_test.cxx
index 1ce8ef99c926..0d69e3d18ce5 100644
--- a/sc/qa/unit/subsequent_export_test.cxx
+++ b/sc/qa/unit/subsequent_export_test.cxx
@@ -2133,6 +2133,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 565c4acc5042cf142b0996f71dee3e511f3b0d29
Author:     Paris Oplopoios <paris.oplopo...@collabora.com>
AuthorDate: Thu Oct 26 12:35:23 2023 +0300
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Tue Oct 31 09:34:51 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>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158646

diff --git a/sc/source/filter/excel/xecontent.cxx 
b/sc/source/filter/excel/xecontent.cxx
index b1329e56f535..6f48a6f3ef96 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -1057,7 +1057,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