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 <quikee@gmail.com>
This commit is contained in:
Tomaž Vajngerl
2023-07-02 09:43:36 +02:00
committed by Tomaž Vajngerl
parent c7d202a61f
commit 9a6cdc8a90
2 changed files with 34 additions and 0 deletions
+26
View File
@@ -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 )
@@ -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();