Example #1
0
        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;
            }
        }
Example #2
0
        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);
        }
Example #3
0
        /// <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);
        }