diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs index 66221b7..afc77bd 100644 --- a/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/Excel/XLWorkbook_Save.cs @@ -5475,7 +5475,9 @@ cm.SetElement(XLWSContentManager.XLWSContents.Drawing, worksheetPart.Worksheet.Elements().First()); } - if (!xlWorksheet.Pictures.Any() && worksheetPart.DrawingsPart != null) + // Instead of saving a file with an empty Drawings.xml file, rather remove the .xml file + if (!xlWorksheet.Pictures.Any() && worksheetPart.DrawingsPart != null + && !worksheetPart.DrawingsPart.Parts.Any()) { var id = worksheetPart.GetIdOfPart(worksheetPart.DrawingsPart); worksheetPart.Worksheet.RemoveChild(worksheetPart.Worksheet.OfType().FirstOrDefault(p => p.Id == id)); diff --git a/ClosedXML_Tests/Excel/Saving/SavingTests.cs b/ClosedXML_Tests/Excel/Saving/SavingTests.cs index 4b19a6b..e0fa221 100644 --- a/ClosedXML_Tests/Excel/Saving/SavingTests.cs +++ b/ClosedXML_Tests/Excel/Saving/SavingTests.cs @@ -254,5 +254,38 @@ wb.SaveAs(ms); } } + + [Test] + public void PreserveChartsWhenSaving() + { + using (var stream = TestHelper.GetStreamFromResource(TestHelper.GetResourcePath(@"Other\Charts\PreserveCharts\inputfile.xlsx"))) + using (var ms = new MemoryStream()) + { + TestHelper.CreateAndCompare(() => + { + var wb = new XLWorkbook(stream); + wb.SaveAs(ms); + return wb; + }, @"Other\Charts\PreserveCharts\outputfile.xlsx"); + } + } + + [Test] + public void DeletingAllPicturesRemovesDrawingPart() + { + TestHelper.CreateAndCompare(() => + { + var stream = TestHelper.GetStreamFromResource(TestHelper.GetResourcePath(@"Examples\ImageHandling\ImageAnchors.xlsx")); + var wb = new XLWorkbook(stream); + foreach (var ws in wb.Worksheets) + { + var pictureNames = ws.Pictures.Select(pic => pic.Name).ToArray(); + foreach (var name in pictureNames) + ws.Pictures.Delete(name); + } + + return wb; + }, @"Other\Drawings\NoDrawings\outputfile.xlsx"); + } } -} \ No newline at end of file +} diff --git a/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/inputfile.xlsx b/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/inputfile.xlsx new file mode 100644 index 0000000..f2c41f2 --- /dev/null +++ b/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/inputfile.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/outputfile.xlsx b/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/outputfile.xlsx new file mode 100644 index 0000000..5aa86b6 --- /dev/null +++ b/ClosedXML_Tests/Resource/Other/Charts/PreserveCharts/outputfile.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Other/Drawings/NoDrawings/outputfile.xlsx b/ClosedXML_Tests/Resource/Other/Drawings/NoDrawings/outputfile.xlsx new file mode 100644 index 0000000..4cf9bea --- /dev/null +++ b/ClosedXML_Tests/Resource/Other/Drawings/NoDrawings/outputfile.xlsx Binary files differ