Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions src/EPPlus/Drawing/ExcelDrawing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ Date Author Change
using OfficeOpenXml.Utils.FileUtils;
using OfficeOpenXml.Utils.XML;
using System;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -583,6 +582,9 @@ internal static ExcelDrawing GetDrawing(ExcelDrawings drawings, XmlNode node, Dr

internal static ExcelDrawing GetDrawingFromNode(ExcelDrawings drawings, XmlNode node, XmlElement drawNode, ExcelGroupShape parent = null, DrawingsCollectionType DrawingsType = DrawingsCollectionType.Worksheet)
{
string fallbackDrawingPath = "";
string fallbackNvPrPath = "";

switch (drawNode.LocalName)
{
case "sp":
Expand All @@ -591,11 +593,19 @@ internal static ExcelDrawing GetDrawingFromNode(ExcelDrawings drawings, XmlNode
var aPic = new ExcelPicture(drawings, node, parent, DrawingsType);
return aPic;
case "graphicFrame":
var c= ExcelChart.GetChart(drawings, node, parent);
if(c!=null) //If null, the drawing is not a chart. Might be a smart art, diagram or 3d model. We return a standard drawing to retain the drawing.
var c = ExcelChart.GetChart(drawings, node, parent);
if (c!=null) //If null, the drawing is not a chart. Might be a smart art, diagram or 3d model. We return a standard drawing to retain the drawing.
{
return c;
}
else
{
//While we do not know the exact type.
//It's a standard drawing with a graphic frame
//We assume the object has its name etc. in the same nodes as a chart
fallbackDrawingPath = "xdr:graphicFrame";
fallbackNvPrPath = "xdr:nvGraphicFramePr/xdr:cNvPr";
}
break;
case "grpSp":
return new ExcelGroupShape(drawings, node, parent, DrawingsType);
Expand Down Expand Up @@ -644,7 +654,7 @@ internal static ExcelDrawing GetDrawingFromNode(ExcelDrawings drawings, XmlNode
}
break;
}
return new ExcelDrawing(drawings, node, "", "",parent, DrawingsType);
return new ExcelDrawing(drawings, node, fallbackDrawingPath, fallbackNvPrPath, parent, DrawingsType);
}

private static ExcelDrawing GetShapeOrControl(ExcelDrawings drawings, XmlNode node, XmlElement drawNode, ExcelGroupShape parent, DrawingsCollectionType collectionType = DrawingsCollectionType.Worksheet)
Expand Down
4 changes: 3 additions & 1 deletion src/EPPlus/Drawing/ExcelGroupShape.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ private void AddDrawings()
_groupDrawings = new List<ExcelDrawing>();
foreach (XmlNode node in _topNode.ChildNodes)
{

if (node.LocalName != "nvGrpSpPr" && node.LocalName != "grpSpPr")
{
var grpDraw = ExcelDrawing.GetDrawingFromNode(_parent._drawings, node, (XmlElement)node, _parent, _drawingsCollectionType);
Expand Down Expand Up @@ -645,6 +644,9 @@ internal override void SaveDrawing(bool hasLoadedPivotTables)

foreach (var d in Drawings)
{
//Ensure position on underlying drawings are updated
d.AdjustPositionAndSize();
d.UpdatePositionAndSizeXml();
d.SaveDrawing(hasLoadedPivotTables);
}
}
Expand Down
8 changes: 7 additions & 1 deletion src/EPPlusTest/Issues/ChartIssues.cs
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,13 @@ public void s1038()
//Crashes when accessesing
var drawingsWithinGroupShape = groupShape.Drawings;

SaveAndCleanup(package);
var firstDrawing = drawingsWithinGroupShape[0];

firstDrawing.SetPosition(500, 500);
//drawingsWithinGroupShape[0].Position.Y = 2000;


SaveAndCleanup(package);
}
}

Expand Down
Loading