From 576c6d6b78dcde34a41deb2b01e77ad6a9d8e674 Mon Sep 17 00:00:00 2001 From: Sergey Tihon Date: Thu, 7 Oct 2021 21:12:54 +0200 Subject: [PATCH] fix copy Chart Style Parts in FluentPresentationBuilder --- Clippit.sln | 2 +- .../PowerPoint/PresentationBuilderTools.cs | 29 ++++++++++++++++++- RELEASE_NOTES.md | 3 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Clippit.sln b/Clippit.sln index c535e8c2..9a471497 100644 --- a/Clippit.sln +++ b/Clippit.sln @@ -13,7 +13,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitignore = .gitignore paket.dependencies = paket.dependencies README.md = README.md - docs\RELEASE_NOTES.md = docs\RELEASE_NOTES.md + RELEASE_NOTES.md = RELEASE_NOTES.md EndProjectSection EndProject Global diff --git a/OpenXmlPowerTools/PowerPoint/PresentationBuilderTools.cs b/OpenXmlPowerTools/PowerPoint/PresentationBuilderTools.cs index c8498f8b..401fb11a 100644 --- a/OpenXmlPowerTools/PowerPoint/PresentationBuilderTools.cs +++ b/OpenXmlPowerTools/PowerPoint/PresentationBuilderTools.cs @@ -149,14 +149,41 @@ internal static void CopyChartObjects(ChartPart oldChart, ChartPart newChart) else { //ExternalRelationship oldRelationship = oldChart.GetExternalRelationship(relId); - var newRid = NewRelationshipId(); var oldRel = oldChart.ExternalRelationships.FirstOrDefault(h => h.Id == relId); if (oldRel is null) throw new PresentationBuilderInternalException("Internal Error 0007"); + + var newRid = NewRelationshipId(); newChart.AddExternalRelationship(oldRel.RelationshipType, oldRel.Uri, newRid); dataReference.Attribute(R.id).Set(newRid); } } + + foreach (var idPartPair in oldChart.Parts) + { + switch (idPartPair.OpenXmlPart) + { + case ThemeOverridePart oldThemeOverridePart: + CopyPart(oldThemeOverridePart); + break; + case ChartColorStylePart oldChartColorStylePart: + CopyPart(oldChartColorStylePart); + break; + case ChartStylePart oldChartColorStylePart: + CopyPart(oldChartColorStylePart); + break; + } + } + + void CopyPart(T oldPart) where T : OpenXmlPart + { + var newRid = NewRelationshipId(); + var newPart = newChart.AddNewPart(oldPart.ContentType, newRid); + + using var oldStream = oldPart.GetStream(FileMode.Open, FileAccess.Read); + using var newStream = newPart.GetStream(FileMode.Create, FileAccess.ReadWrite); + oldStream.CopyTo(newStream); + } } private static void UpdateContent(IEnumerable newContent, XName elementToModify, string oldRid, string newRid) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 691223ba..d65a7985 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +#### 1.7.3 - Oct 7, 2021 +- Fixed copy Chart Style Parts in FluentPresentationBuilder + #### 1.7.2 - Aug 23, 2021 - DocumentFormat.OpenXml v2.13.1