好像没有内置的功能,所以,直到我找到一个更好的解决办法,我添加了下面的方法来EPPlus\Drawings\ExcelDrawings.cs
public ExcelShape CloneShape(string SourceName, string TargetName)
{
if (_drawingNames.ContainsKey(TargetName.ToLower()))
{
throw new Exception("Target name already exists in the drawings collection");
}
if (!_drawingNames.ContainsKey(SourceName.ToLower()))
{
throw new Exception("Source shape does not exist in the drawings collection");
}
ExcelShape shape = new ExcelShape(this, this._drawingsXml,
(ExcelShape) this[SourceName]);
shape.Name = TargetName;
_drawings.Add(shape);
_drawingNames.Add(TargetName.ToLower(), _drawings.Count - 1);
return shape;
}
而且这种构造在ExcelShape.cs
:
internal ExcelShape(ExcelDrawings drawings, XmlDocument DrawingsXml, ExcelShape shapeSource) :
base(drawings, shapeSource._topNode.Clone(), "xdr:sp/xdr:nvSpPr/xdr:cNvPr/@name")
{
this.init();
XmlNode colNode = DrawingsXml.SelectSingleNode("//xdr:wsDr", NameSpaceManager);
colNode.AppendChild(this._topNode);
}