internal void SetCellAnchor(eEditAs value) { switch (value) { case eEditAs.Absolute: _control.MoveWithCells = false; _control.SizeWithCells = false; break; case eEditAs.OneCell: _control.MoveWithCells = true; _control.SizeWithCells = false; break; default: _control.MoveWithCells = true; _control.SizeWithCells = true; break; } }
private XmlElement CreateDrawingXml(eEditAs topNodeType = eEditAs.TwoCell) { if (DrawingXml.DocumentElement == null) { DrawingXml.LoadXml(string.Format("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><xdr:wsDr xmlns:xdr=\"{0}\" xmlns:a=\"{1}\" />", ExcelPackage.schemaSheetDrawings, ExcelPackage.schemaDrawings)); Packaging.ZipPackage package = Worksheet._package.Package; //Check for existing part, issue #100 var id = Worksheet.SheetID; do { _uriDrawing = new Uri(string.Format("/xl/drawings/drawing{0}.xml", id++), UriKind.Relative); }while (package.PartExists(_uriDrawing)); _part = package.CreatePart(_uriDrawing, "application/vnd.openxmlformats-officedocument.drawing+xml", _package.Compression); StreamWriter streamChart = new StreamWriter(_part.GetStream(FileMode.Create, FileAccess.Write)); DrawingXml.Save(streamChart); streamChart.Close(); package.Flush(); _drawingRelation = Worksheet.Part.CreateRelationship(UriHelper.GetRelativeUri(Worksheet.WorksheetUri, _uriDrawing), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/drawing"); XmlElement e = (XmlElement)Worksheet.CreateNode("d:drawing"); e.SetAttribute("id", ExcelPackage.schemaRelationships, _drawingRelation.Id); package.Flush(); } XmlNode colNode = _drawingsXml.SelectSingleNode("//xdr:wsDr", NameSpaceManager); XmlElement drawNode; var topElementname = $"{topNodeType.ToEnumString()}Anchor"; drawNode = _drawingsXml.CreateElement("xdr", topElementname, ExcelPackage.schemaSheetDrawings); colNode.AppendChild(drawNode); if (topNodeType == eEditAs.OneCell || topNodeType == eEditAs.TwoCell) { //Add from position Element; XmlElement fromNode = _drawingsXml.CreateElement("xdr", "from", ExcelPackage.schemaSheetDrawings); drawNode.AppendChild(fromNode); fromNode.InnerXml = "<xdr:col>0</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>0</xdr:row><xdr:rowOff>0</xdr:rowOff>"; } else { //Add from position Element; XmlElement posNode = _drawingsXml.CreateElement("xdr", "pos", ExcelPackage.schemaSheetDrawings); posNode.SetAttribute("x", "0"); posNode.SetAttribute("y", "0"); drawNode.AppendChild(posNode); } if (topNodeType == eEditAs.TwoCell) { //Add to position Element; XmlElement toNode = _drawingsXml.CreateElement("xdr", "to", ExcelPackage.schemaSheetDrawings); drawNode.AppendChild(toNode); toNode.InnerXml = "<xdr:col>10</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>10</xdr:row><xdr:rowOff>0</xdr:rowOff>"; } else { //Add from position Element; XmlElement posNode = _drawingsXml.CreateElement("xdr", "ext", ExcelPackage.schemaSheetDrawings); posNode.SetAttribute("cx", "6072876"); posNode.SetAttribute("cy", "9299263"); drawNode.AppendChild(posNode); } return(drawNode); }
/// <summary> /// Adds a new chart to the worksheet. /// Do not support stock charts. /// </summary> /// <param name="Name"></param> /// <param name="ChartType">Type of chart</param> /// <param name="PivotTableSource">The pivottable source for a pivotchart</param> /// <param name="DrawingType">The top element drawingtype. Default is OneCellAnchor for Pictures and TwoCellAnchor from Charts and Shapes</param> /// <returns>The chart</returns> public ExcelChart AddChart(string Name, eChartType ChartType, ExcelPivotTable PivotTableSource, eEditAs DrawingType = eEditAs.TwoCell) { if (_drawingNames.ContainsKey(Name)) { throw new Exception("Name already exists in the drawings collection"); } if (ChartType == eChartType.StockHLC || ChartType == eChartType.StockOHLC || ChartType == eChartType.StockVOHLC) { throw (new NotImplementedException("Chart type is not supported in the current version")); } if (Worksheet is ExcelChartsheet && _drawings.Count > 0) { throw new InvalidOperationException("Chart Worksheets can't have more than one chart"); } XmlElement drawNode = CreateDrawingXml(DrawingType); ExcelChart chart = ExcelChart.GetNewChart(this, drawNode, ChartType, null, PivotTableSource); chart.Name = Name; _drawings.Add(chart); _drawingNames.Add(Name, _drawings.Count - 1); return(chart); }