sc/source/filter/excel/excdoc.cxx         |   26 ++++++++++++++++++++++++++
 sc/source/filter/oox/workbookfragment.cxx |    8 ++++++++
 2 files changed, 34 insertions(+)

New commits:
commit cb5da7ac32c27248117e6dfc6860f52891b3c57e
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jun 30 00:47:27 2023 +0900
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Mon Jul 3 11:28:52 2023 +0200

    sc: OOXML import and export the model::Theme properly
    
    Change-Id: I76fc928a53d007a9f5e9174167e0594208a4b47a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153784
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 920980c6f5e987fbd8cebe331b599cfc331e95ff)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153843
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/source/filter/excel/excdoc.cxx 
b/sc/source/filter/excel/excdoc.cxx
index 8e394ad73146..2dab16be5e87 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -53,6 +53,10 @@
 #include <o3tl/safeint.hxx>
 #include <oox/token/tokens.hxx>
 #include <oox/token/namespaces.hxx>
+#include <oox/token/relationship.hxx>
+#include <oox/export/ThemeExport.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <svx/svdpage.hxx>
 #include <memory>
 
 using namespace oox;
@@ -861,6 +865,28 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm )
     {
         InitializeSave();
 
+        auto* pDrawLayer = GetDoc().GetDrawLayer();
+        if (pDrawLayer)
+        {
+            SdrPage* pPage = pDrawLayer->GetPage(0);
+            if (pPage)
+            {
+                std::shared_ptr<model::Theme> pTheme = 
pPage->getSdrPageProperties().GetTheme();
+                if (pTheme)
+                {
+                    OUString sThemeRelationshipPath = "theme/theme1.xml";
+                    OUString sThemeDocumentPath = "xl/" + 
sThemeRelationshipPath;
+
+                    oox::ThemeExport aThemeExport(&rStrm, 
oox::drawingml::DOCUMENT_XLSX);
+                    aThemeExport.write(sThemeDocumentPath, *pTheme);
+
+                    
rStrm.addRelation(rStrm.GetCurrentStream()->getOutputStream(),
+                                      
oox::getRelationship(Relationship::THEME),
+                                      sThemeRelationshipPath);
+                }
+            }
+        }
+
         aHeader.WriteXml( rStrm );
 
         for( size_t nTab = 0, nTabCount = maTableList.GetSize(); nTab < 
nTabCount; ++nTab )
diff --git a/sc/source/filter/oox/workbookfragment.cxx 
b/sc/source/filter/oox/workbookfragment.cxx
index 076dbe24b63f..2f99a49d595e 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -64,6 +64,7 @@
 #include <vcl/weld.hxx>
 
 #include <oox/core/fastparser.hxx>
+#include <svx/svdpage.hxx>
 #include <comphelper/threadpool.hxx>
 #include <sal/log.hxx>
 #include <osl/diagnose.h>
@@ -486,6 +487,12 @@ void WorkbookFragment::finalizeImport()
     // load all worksheets
     importSheetFragments(*this, aSheetFragments);
 
+    SdrPage* pPage = pModel->GetPage(0);
+    if (pPage && pTheme && !pTheme->GetName().isEmpty())
+    {
+        pPage->getSdrPageProperties().SetTheme(pTheme);
+    }
+
     // assumes getTables().finalizeImport ( which creates the DatabaseRanges )
     // has been called already
     getTables().applyAutoFilters();
@@ -512,6 +519,7 @@ void WorkbookFragment::finalizeImport()
         rxSheetGlob.reset();
     }
 
+
     getDocImport().finalize();
 
     recalcFormulaCells();

Reply via email to