/// <summary>
        /// Reset the color objects
        /// </summary>
        /// <param name="newNodeName">The new color node name</param>
        internal protected virtual void ResetColors(string newNodeName)
        {
            if (_colorNode == null)
            {
                var xml = XmlHelperFactory.Create(_nameSpaceManager, _topNode);
                xml.SchemaNodeOrder = _schemaNodeOrder;
                var colorPath = string.IsNullOrEmpty(_path) ? newNodeName : _path + "/" + newNodeName;
                _colorNode = xml.CreateNode(colorPath);
                _initMethod?.Invoke();
            }
            if (_colorNode.Name == newNodeName)
            {
                return;
            }
            else
            {
                _transforms = null;
                ChangeType(newNodeName);
            }

            RgbColor           = null;
            RgbPercentageColor = null;
            HslColor           = null;
            PresetColor        = null;
            SystemColor        = null;
        }
Пример #2
0
        private ExcelFilterDateGroupItem CreateDateGroupItem(XmlNode node)
        {
            try
            {
                var xml      = XmlHelperFactory.Create(NameSpaceManager, node);
                var grouping = (eDateTimeGrouping)Enum.Parse(typeof(eDateTimeGrouping), xml.GetXmlNodeString("@dateTimeGrouping"), true);
                switch (grouping)
                {
                case eDateTimeGrouping.Year:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year")));

                case eDateTimeGrouping.Month:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year"), xml.GetXmlNodeInt("@month")));

                case eDateTimeGrouping.Day:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year"), xml.GetXmlNodeInt("@month"), xml.GetXmlNodeInt("@day")));

                case eDateTimeGrouping.Hour:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year"), xml.GetXmlNodeInt("@month"), xml.GetXmlNodeInt("@day"), xml.GetXmlNodeInt("@hour")));

                case eDateTimeGrouping.Minute:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year"), xml.GetXmlNodeInt("@month"), xml.GetXmlNodeInt("@day"), xml.GetXmlNodeInt("@hour"), xml.GetXmlNodeInt("@minute")));

                default:
                    return(new ExcelFilterDateGroupItem(xml.GetXmlNodeInt("@year"), xml.GetXmlNodeInt("@month"), xml.GetXmlNodeInt("@day"), xml.GetXmlNodeInt("@hour"), xml.GetXmlNodeInt("@minute"), xml.GetXmlNodeInt("@second")));
                }
            }
            catch
            {
                return(null);
            }
        }
Пример #3
0
        protected ExcelControl(ExcelDrawings drawings, XmlNode drawingNode, string name, ExcelGroupShape parent = null) :
            base(drawings, drawingNode, "xdr:sp", "xdr:nvSpPr/xdr:cNvPr", parent)
        {
            var ws = drawings.Worksheet;

            //Drawing Xml
            XmlElement spElement = CreateShapeNode();

            spElement.InnerXml = ControlStartDrawingXml();
            CreateClientData();

            ControlPropertiesXml = new XmlDocument();
            ControlPropertiesXml.LoadXml(ControlStartControlPrXml());
            int id = ws.SheetId;

            ControlPropertiesUri  = GetNewUri(ws._package.ZipPackage, "/xl/ctrlProps/ctrlProp{0}.xml", ref id);
            ControlPropertiesPart = ws._package.ZipPackage.CreatePart(ControlPropertiesUri, ContentTypes.contentTypeControlProperties);
            var rel = ws.Part.CreateRelationship(ControlPropertiesUri, TargetMode.Internal, ExcelPackage.schemaRelationships + "/ctrlProp");

            //Vml
            _vml     = drawings.Worksheet.VmlDrawings.AddControl(this, name);
            _vmlProp = XmlHelperFactory.Create(_vml.NameSpaceManager, _vml.GetNode("x:ClientData"));

            //Control in worksheet xml
            XmlNode ctrlNode = ws.CreateControlContainerNode();

            ((XmlElement)ws.TopNode).SetAttribute("xmlns:xdr", ExcelPackage.schemaSheetDrawings);      //Make sure the namespace exists
            ((XmlElement)ws.TopNode).SetAttribute("xmlns:x14", ExcelPackage.schemaMainX14);            //Make sure the namespace exists
            ((XmlElement)ws.TopNode).SetAttribute("xmlns:mc", ExcelPackage.schemaMarkupCompatibility); //Make sure the namespace exists
            ctrlNode.InnerXml = GetControlStartWorksheetXml(rel.Id);
            _control          = new ControlInternal(NameSpaceManager, ctrlNode.FirstChild);
            _ctrlProp         = XmlHelperFactory.Create(NameSpaceManager, ControlPropertiesXml.DocumentElement);
        }
Пример #4
0
        internal protected void CreateWorkbookReference(ExcelWorkbook wb, string uriGuid)
        {
            wb.Names.AddFormula(Name, "#N/A");
            if (!wb.SlicerCaches.ContainsKey(Name))
            {
                wb.SlicerCaches.Add(Name, this);
            }

            string prefix;

            if (GetType() == typeof(ExcelPivotTableSlicerCache))
            {
                prefix = "x14";
            }
            else
            {
                prefix = "x15";
            }
            var extNode = wb.GetOrCreateExtLstSubNode(uriGuid, prefix, new string[] { ExtLstUris.WorkbookSlicerPivotTableUri, ExtLstUris.WorkbookSlicerTableUri });

            if (extNode.InnerXml == "")
            {
                extNode.InnerXml = $"<{prefix}:slicerCaches />";
            }
            var slNode  = extNode.FirstChild;
            var xh      = XmlHelperFactory.Create(NameSpaceManager, slNode);
            var element = (XmlElement)xh.CreateNode("x14:slicerCache", false, true);

            element.SetAttribute("id", ExcelPackage.schemaRelationships, CacheRel.Id);
        }
Пример #5
0
        private void CreateDrawing(string name)
        {
            XmlElement graphFrame = TopNode.OwnerDocument.CreateElement("mc", "AlternateContent", ExcelPackage.schemaMarkupCompatibility);

            graphFrame.SetAttribute("xmlns:mc", ExcelPackage.schemaMarkupCompatibility);
            graphFrame.SetAttribute("xmlns:a14", ExcelPackage.schemaDrawings2010);
            TopNode.AppendChild(graphFrame);
            graphFrame.InnerXml = string.Format("<mc:Choice Requires=\"a14\"><xdr:graphicFrame macro=\"\"><xdr:nvGraphicFramePr><xdr:cNvPr id=\"{0}\" name=\"{2}\"><a:extLst><a:ext uri=\"{{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}}\"><a16:creationId xmlns:a16=\"http://schemas.microsoft.com/office/drawing/2014/main\" id=\"{1}\"/></a:ext></a:extLst></xdr:cNvPr><xdr:cNvGraphicFramePr/></xdr:nvGraphicFramePr><xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xdr:xfrm><a:graphic><a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2010/slicer\"><sle:slicer xmlns:sle=\"http://schemas.microsoft.com/office/drawing/2010/slicer\" name=\"{2}\"/></a:graphicData></a:graphic></xdr:graphicFrame></mc:Choice><mc:Fallback xmlns=\"\"><xdr:sp macro=\"\" textlink=\"\"><xdr:nvSpPr><xdr:cNvPr id=\"{0}\" name=\"{1}\"/><xdr:cNvSpPr><a:spLocks noTextEdit=\"1\"/></xdr:cNvSpPr></xdr:nvSpPr><xdr:spPr><a:xfrm><a:off x=\"12506325\" y=\"3238500\"/><a:ext cx=\"1828800\" cy=\"2524125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom><a:solidFill><a:prstClr val=\"white\"/></a:solidFill><a:ln w=\"1\"><a:solidFill><a:prstClr val=\"green\"/></a:solidFill></a:ln></xdr:spPr><xdr:txBody><a:bodyPr vertOverflow=\"clip\" horzOverflow=\"clip\"/><a:lstStyle/><a:p><a:r><a:rPr lang=\"sv-SE\" sz=\"1100\"/><a:t>This shape represents a slicer. Slicers are supported in Excel 2010 or later. If the shape was modified in an earlier version of Excel, or if the workbook was saved in Excel 2003 or earlier, the slicer cannot be used.</a:t></a:r></a:p></xdr:txBody></xdr:sp></mc:Fallback>",
                                                _id,
                                                "{" + Guid.NewGuid().ToString() + "}",
                                                name);
            TopNode.AppendChild(TopNode.OwnerDocument.CreateElement("clientData", ExcelPackage.schemaSheetDrawings));

            _xmlSource = _ws.SlicerXmlSources.GetOrCreateSource(eSlicerSourceType.Table);
            var node = _xmlSource.XmlDocument.CreateElement("slicer", ExcelPackage.schemaMainX14);

            _xmlSource.XmlDocument.DocumentElement.AppendChild(node);
            _slicerXmlHelper = XmlHelperFactory.Create(NameSpaceManager, node);

            var extNode = _ws.GetOrCreateExtLstSubNode(ExtLstUris.WorksheetSlicerPivotTableUri, "x14");

            if (extNode.InnerXml == "")
            {
                extNode.InnerXml = "<x14:slicerList/>";
                var slNode = extNode.FirstChild;

                var xh      = XmlHelperFactory.Create(NameSpaceManager, slNode);
                var element = (XmlElement)xh.CreateNode("x14:slicer", false, true);
                element.SetAttribute("id", ExcelPackage.schemaRelationships, _xmlSource.Rel.Id);
            }

            GetPositionSize();
        }
Пример #6
0
 private void Init(ExcelDrawings drawings, XmlNode chartNode)
 {
     _isChartEx      = chartNode.NamespaceURI == ExcelPackage.schemaChartExMain;
     _hashes         = new Dictionary <string, HashInfo>();
     _chartXmlHelper = XmlHelperFactory.Create(drawings.NameSpaceManager, chartNode);
     _chartXmlHelper.AddSchemaNodeOrder(new string[] { "date1904", "lang", "roundedCorners", "AlternateContent", "style", "clrMapOvr", "pivotSource", "protection", "chart", "ofPieType", "title", "pivotFmt", "autoTitleDeleted", "view3D", "floor", "sideWall", "backWall", "plotArea", "wireframe", "barDir", "grouping", "scatterStyle", "radarStyle", "varyColors", "ser", "dLbls", "bubbleScale", "showNegBubbles", "firstSliceAng", "holeSize", "dropLines", "hiLowLines", "upDownBars", "marker", "smooth", "shape", "legend", "plotVisOnly", "dispBlanksAs", "gapWidth", "upBars", "downBars", "showDLblsOverMax", "overlap", "bandFmts", "axId", "spPr", "txPr", "printSettings" }, ExcelDrawing._schemaNodeOrderSpPr);
     WorkSheet = drawings.Worksheet;
 }
Пример #7
0
 private void Init(ExcelDrawings drawings, XmlDocument chartXml)
 {
     WorkSheet = drawings.Worksheet;
     if (chartXml != null)
     {
         ChartXml        = chartXml;
         _chartXmlHelper = XmlHelperFactory.Create(drawings.NameSpaceManager, chartXml.DocumentElement);
     }
 }
Пример #8
0
        internal override void GetXml()
        {
            _colors         = new ExcelDrawingGradientFillColorList(_xml.NameSpaceManager, _xml.TopNode, ColorsPath, _schemaNodeOrder);
            RotateWithShape = _xml.GetXmlNodeBool("@rotWithShape");
            try
            {
                var s = _xml.GetXmlNodeString("@flip");
                if (string.IsNullOrEmpty(s))
                {
                    TileFlip = eTileFlipMode.None;
                }
                else
                {
                    TileFlip = (eTileFlipMode)Enum.Parse(typeof(eTileFlipMode), s, true);
                }
            }
            catch
            {
                TileFlip = eTileFlipMode.None;
            }

            var cols = _xml.TopNode.SelectSingleNode("a:gsLst", _xml.NameSpaceManager);

            if (cols != null)
            {
                foreach (XmlNode c in cols.ChildNodes)
                {
                    var xml = XmlHelperFactory.Create(_xml.NameSpaceManager, c);
                    _colors.Add(xml.GetXmlNodeDouble("@pos") / 1000, c);
                }
            }
            var path = _xml.GetXmlNodeString("a:path/@path");

            if (!string.IsNullOrEmpty(path))
            {
                if (path == "rect")
                {
                    path = "rectangle";
                }
                ShadePath = path.ToEnum(eShadePath.Linear);
            }
            else
            {
                ShadePath = eShadePath.Linear;
            }
            if (ShadePath == eShadePath.Linear)
            {
                LinearSettings = new ExcelDrawingGradientFillLinearSettings(_xml);
            }
            else
            {
                FocusPoint = new ExcelDrawingRectangle(_xml, "a:path/a:fillToRect/", 0);
            }
        }
Пример #9
0
 internal ExcelControl(ExcelDrawings drawings, XmlNode drawingNode, ControlInternal control, ZipPackagePart ctrlPropPart, XmlDocument ctrlPropXml, ExcelGroupShape parent = null) :
     base(drawings, drawingNode, "xdr:sp", "xdr:nvSpPr/xdr:cNvPr", parent)
 {
     _control              = control;
     _vml                  = (ExcelVmlDrawingControl)drawings.Worksheet.VmlDrawings[LegacySpId];
     _vmlProp              = XmlHelperFactory.Create(_vml.NameSpaceManager, _vml.GetNode("x:ClientData"));
     ControlPropertiesXml  = ctrlPropXml;
     ControlPropertiesPart = ctrlPropPart;
     ControlPropertiesUri  = ctrlPropPart.Uri;
     _ctrlProp             = XmlHelperFactory.Create(NameSpaceManager, ctrlPropXml.DocumentElement);
 }
Пример #10
0
        internal ExcelPivotTableSlicer(ExcelDrawings drawings, XmlNode node, ExcelGroupShape parent = null) : base(drawings, node, parent)
        {
            _ws = drawings.Worksheet;
            var slicerNode = _ws.SlicerXmlSources.GetSource(Name, eSlicerSourceType.PivotTable, out _xmlSource);

            _slicerXmlHelper = XmlHelperFactory.Create(NameSpaceManager, slicerNode);

            var cache = (ExcelPivotTableSlicerCache)drawings.Worksheet.Workbook.GetSlicerCaches(CacheName);

            cache.Init(drawings.Worksheet.Workbook, this);
            _cache = cache;
        }
Пример #11
0
        internal ExcelTableSlicer(ExcelDrawings drawings, XmlNode node, ExcelGroupShape parent = null) : base(drawings, node, parent)
        {
            _ws = drawings.Worksheet;
            var slicerNode = _ws.SlicerXmlSources.GetSource(Name, eSlicerSourceType.Table, out _xmlSource);

            _slicerXmlHelper = XmlHelperFactory.Create(NameSpaceManager, slicerNode);

            _ws.Workbook.SlicerCaches.TryGetValue(CacheName, out ExcelSlicerCache cache);
            _cache = (ExcelTableSlicerCache)cache;

            TableColumn = GetTableColumn();
        }
Пример #12
0
        /// <summary>
        /// Adds a legend to the chart
        /// </summary>
        public override void Add()
        {
            if (TopNode != null)
            {
                return;
            }

            //XmlHelper xml = new XmlHelper(NameSpaceManager, _chart.ChartXml);
            XmlHelper xml = XmlHelperFactory.Create(NameSpaceManager, _chart.ChartXml);

            xml.SchemaNodeOrder = _chart.SchemaNodeOrder;

            TopNode = xml.CreateNode("cx:chartSpace/cx:chart/cx:legend");
        }
 private void ChangeType(string type)
 {
     if (_topNode == _colorNode)
     {
         var xh = XmlHelperFactory.Create(_nameSpaceManager, _topNode);
         xh.ReplaceElement(_colorNode, type);
     }
     else
     {
         var p = _colorNode.ParentNode;
         p.InnerXml = $"<{type} />";
         _colorNode = p.FirstChild;
     }
 }
Пример #14
0
 /// <summary>
 /// Init xml
 /// </summary>
 /// <param name="nsm">Xml namespace manager</param>
 /// <param name="node">The node</param>
 /// <param name="fillPath">The fill path</param>
 internal protected void InitXml(XmlNamespaceManager nsm, XmlNode node, string fillPath)
 {
     _fillPath = fillPath;
     _nsm      = nsm;
     _topNode  = node;
     if (string.IsNullOrEmpty(fillPath))
     {
         _xml = XmlHelperFactory.Create(nsm, node);
     }
     else
     {
         _xml = null;
     }
 }
Пример #15
0
 private XmlHelper GetSerieHelper()
 {
     if (_valSerieHelper == null)
     {
         if (_dataNode.ChildNodes.Count == 1)
         {
             _valSerieHelper = XmlHelperFactory.Create(NameSpaceManager, _dataNode.FirstChild);
         }
         else if (_dataNode.ChildNodes.Count > 1)
         {
             _valSerieHelper = XmlHelperFactory.Create(NameSpaceManager, _dataNode.ChildNodes[1]);
         }
     }
     return(_valSerieHelper);
 }
Пример #16
0
        /// <summary>
        /// Add a legend to the chart
        /// </summary>
        public void Add()
        {
            if (TopNode != null)
            {
                return;
            }

            //XmlHelper xml = new XmlHelper(NameSpaceManager, _chart.ChartXml);
            XmlHelper xml = XmlHelperFactory.Create(NameSpaceManager, _chart.ChartXml);

            xml.SchemaNodeOrder = _chart.SchemaNodeOrder;

            xml.CreateNode("c:chartSpace/c:chart/c:legend");
            TopNode          = _chart.ChartXml.SelectSingleNode("c:chartSpace/c:chart/c:legend", NameSpaceManager);
            TopNode.InnerXml = "<c:legendPos val=\"r\" /><c:layout />";
        }
Пример #17
0
 private XmlHelper GetXSerieHelper(bool create)
 {
     if (_catSerieHelper == null)
     {
         if (_dataNode.ChildNodes.Count == 1)
         {
             var node = _dataNode.OwnerDocument.CreateElement("strDim", ExcelPackage.schemaChartExMain);
             _dataNode.InsertBefore(node, TopNode.FirstChild);
             _catSerieHelper = XmlHelperFactory.Create(NameSpaceManager, node);
         }
         else if (_dataNode.ChildNodes.Count > 1)
         {
             _catSerieHelper = XmlHelperFactory.Create(NameSpaceManager, _dataNode.ChildNodes[0]);
         }
     }
     return(_catSerieHelper);
 }
Пример #18
0
        private void CreateNewChart(ExcelDrawings drawings, XmlDocument chartXml = null, eChartType?type = null)
        {
            XmlElement graphFrame = TopNode.OwnerDocument.CreateElement("mc", "AlternateContent", ExcelPackage.schemaMarkupCompatibility);

            graphFrame.SetAttribute("xmlns:mc", ExcelPackage.schemaMarkupCompatibility);
            TopNode.AppendChild(graphFrame);
            graphFrame.InnerXml = string.Format("<mc:Choice xmlns:cx1=\"{1}\" Requires=\"cx1\"><xdr:graphicFrame macro=\"\"><xdr:nvGraphicFramePr><xdr:cNvPr id=\"{0}\" name=\"\"><a:extLst><a:ext uri=\"{{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}}\"><a16:creationId xmlns:a16=\"http://schemas.microsoft.com/office/drawing/2014/main\" id=\"{{9FE3C5B3-14FE-44E2-AB27-50960A44C7C4}}\"/></a:ext></a:extLst></xdr:cNvPr><xdr:cNvGraphicFramePr/></xdr:nvGraphicFramePr><xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xdr:xfrm><a:graphic><a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2014/chartex\"><cx:chart xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:id=\"rId1\"/></a:graphicData></a:graphic></xdr:graphicFrame></mc:Choice><mc:Fallback><xdr:sp macro=\"\" textlink=\"\"><xdr:nvSpPr><xdr:cNvPr id=\"{0}\" name=\"\"/><xdr:cNvSpPr><a:spLocks noTextEdit=\"1\"/></xdr:cNvSpPr></xdr:nvSpPr><xdr:spPr><a:xfrm><a:off x=\"3609974\" y=\"938212\"/><a:ext cx=\"5762625\" cy=\"2743200\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom><a:solidFill><a:prstClr val=\"white\"/></a:solidFill><a:ln w=\"1\"><a:solidFill><a:prstClr val=\"green\"/></a:solidFill></a:ln></xdr:spPr><xdr:txBody><a:bodyPr vertOverflow=\"clip\" horzOverflow=\"clip\"/><a:lstStyle/><a:p><a:r><a:rPr lang=\"en-US\" sz=\"1100\"/><a:t>This chart isn't available in your version of Excel. Editing this shape or saving this workbook into a different file format will permanently break the chart.</a:t></a:r></a:p></xdr:txBody></xdr:sp></mc:Fallback>", _id, GetChartExNameSpace(type ?? eChartType.Sunburst));
            TopNode.AppendChild(TopNode.OwnerDocument.CreateElement("clientData", ExcelPackage.schemaSheetDrawings));

            var package = drawings.Worksheet._package.ZipPackage;

            UriChart = GetNewUri(package, "/xl/charts/chartex{0}.xml");

            if (chartXml == null)
            {
                ChartXml = new XmlDocument
                {
                    PreserveWhitespace = ExcelPackage.preserveWhitespace
                };
                LoadXmlSafe(ChartXml, ChartStartXml(type.Value), Encoding.UTF8);
            }
            else
            {
                ChartXml = chartXml;
            }

            // save it to the package
            Part = package.CreatePart(UriChart, ContentTypes.contentTypeChartEx, _drawings._package.Compression);

            StreamWriter streamChart = new StreamWriter(Part.GetStream(FileMode.Create, FileAccess.Write));

            ChartXml.Save(streamChart);
            streamChart.Close();
            package.Flush();

            var chartRelation = drawings.Part.CreateRelationship(UriHelper.GetRelativeUri(drawings.UriDrawing, UriChart), Packaging.TargetMode.Internal, ExcelPackage.schemaChartExRelationships);

            graphFrame.SelectSingleNode("mc:Choice/xdr:graphicFrame/a:graphic/a:graphicData/cx:chart", NameSpaceManager).Attributes["r:id"].Value = chartRelation.Id;
            package.Flush();
            _chartNode      = ChartXml.SelectSingleNode("cx:chartSpace/cx:chart", NameSpaceManager);
            _chartXmlHelper = XmlHelperFactory.Create(NameSpaceManager, _chartNode);
            GetPositionSize();
        }
Пример #19
0
        internal static XmlElement CreateSeriesElement(ExcelChartEx chart, eChartType type, int index, XmlNode referenceNode = null, bool isPareto = false)
        {
            var         plotareaNode = chart._chartXmlHelper.CreateNode("cx:plotArea/cx:plotAreaRegion");
            var         ser          = plotareaNode.OwnerDocument.CreateElement("cx", "series", ExcelPackage.schemaChartExMain);
            XmlNodeList node         = plotareaNode.SelectNodes("cx:series", chart.NameSpaceManager);

            if (node.Count > 0)
            {
                plotareaNode.InsertAfter(ser, referenceNode ?? node[node.Count - 1]);
            }
            else
            {
                var f = XmlHelperFactory.Create(chart.NameSpaceManager, plotareaNode);
                f.InserAfter(plotareaNode, "cx:plotSurface", ser);
            }
            ser.SetAttribute("formatIdx", index.ToString());
            ser.SetAttribute("uniqueId", "{" + Guid.NewGuid().ToString() + "}");
            ser.SetAttribute("layoutId", GetLayoutId(type, isPareto));
            return(ser);
        }
Пример #20
0
        private XmlElement AddGs(double position, XmlNode node)
        {
            if (_gsLst == null)
            {
                var xml = XmlHelperFactory.Create(_nsm, _topNode);
                _gsLst = xml.CreateNode(_path);
            }
            var gs = _gsLst.OwnerDocument.CreateElement("a", "gs", ExcelPackage.schemaDrawings);

            if (node == null)
            {
                _gsLst.AppendChild(gs);
            }
            else
            {
                _gsLst.InsertBefore(gs, node);
            }
            gs.SetAttribute("pos", (position * 1000).ToString());
            return(gs);
        }
Пример #21
0
        /// <summary>
        /// Adds a new chart using an crtx template
        /// </summary>
        /// <param name="crtxStream">The crtx file as a stream</param>
        /// <param name="name">The name of the chart</param>
        /// <param name="pivotTableSource">Pivot table source, if the chart is a pivottable</param>
        /// <returns>The new chart</returns>
        public ExcelChart AddChartFromTemplate(Stream crtxStream, string name, ExcelPivotTable pivotTableSource)
        {
            if (Worksheet is ExcelChartsheet && _drawings.Count > 0)
            {
                throw new InvalidOperationException("Chart worksheets can't have more than one drawing");
            }
            CrtxTemplateHelper.LoadCrtx(crtxStream, out XmlDocument chartXml, out XmlDocument styleXml, out XmlDocument colorsXml, out ZipPackagePart themePart, "The crtx stream");
            if (chartXml == null)
            {
                throw new InvalidDataException("Crtx file is corrupt.");
            }
            var chartXmlHelper = XmlHelperFactory.Create(NameSpaceManager, chartXml.DocumentElement);
            var serNode        = chartXmlHelper.GetNode("/c:chartSpace/c:chart/c:plotArea/*[substring(name(), string-length(name()) - 4) = 'Chart']/c:ser");

            if (serNode != null)
            {
                _seriesTemplateXml = serNode.InnerXml;
                serNode.ParentNode.RemoveChild(serNode);
            }
            XmlElement drawNode = CreateDrawingXml(eEditAs.TwoCell);
            //ExcelChart chart = ExcelChart.CreateChartFromXml(this, drawNode, chartXml);
            var chartType = ExcelChart.GetChartTypeFromNodeName(GetChartNodeName(chartXmlHelper));
            var chart     = ExcelChart.GetNewChart(this, drawNode, chartType, null, pivotTableSource, chartXml);

            chart.Name = name;
            _drawings.Add(chart);
            _drawingNames.Add(name, _drawings.Count - 1);
            var chartStyle = chart.Style;

            if (chartStyle == eChartStyle.None)
            {
                chartStyle = eChartStyle.Style2;
            }
            if (themePart != null)
            {
                chart.StyleManager.LoadThemeOverrideXml(themePart);
            }
            chart.StyleManager.LoadStyleXml(styleXml, chartStyle, colorsXml);

            return(chart);
        }
Пример #22
0
        internal override void UpdateXml()
        {
            base.UpdateXml();
            Margin.UpdateXml();
            var vmlHelper = XmlHelperFactory.Create(_vmlProp.NameSpaceManager, _vmlProp.TopNode.ParentNode);
            var style     = "layout-flow:" + LayoutFlow.TranslateString() + ";mso-layout-flow-alt:" + Orientation.TranslateString();

            if (ReadingOrder == eReadingOrder.RightToLeft)
            {
                style += ";direction:RTL";
            }
            else if (ReadingOrder == eReadingOrder.ContextDependent)
            {
                style += ";mso-direction-alt:auto";
            }
            if (AutomaticSize)
            {
                style += ";mso-fit-shape-to-text:t";
            }
            vmlHelper.SetXmlNodeString("v:textbox/@style", style);
        }
Пример #23
0
        internal ExcelControlMargin(ExcelControlWithText control)
        {
            _control   = control;
            _vmlHelper = XmlHelperFactory.Create(control._vmlProp.NameSpaceManager, control._vmlProp.TopNode.ParentNode);

            Automatic = _vmlHelper.GetXmlNodeString("@o:insetmode") == "auto";
            var margin = _vmlHelper.GetXmlNodeString("v:textbox/@inset");

            var v = margin.GetCsvPosition(0);

            LeftMargin.SetValue(v);

            v = margin.GetCsvPosition(1);
            TopMargin.SetValue(v);

            v = margin.GetCsvPosition(2);
            RightMargin.SetValue(v);

            v = margin.GetCsvPosition(3);
            BottomMargin.SetValue(v);
        }
Пример #24
0
        /// <summary>
        /// Adds a new serie to the chart
        /// </summary>
        /// <param name="SerieAddress">The Y-Axis range</param>
        /// <param name="XSerieAddress">The X-Axis range</param>
        /// <param name="bubbleSizeAddress">Bubble chart size</param>
        /// <returns></returns>
        internal protected T AddSeries(string SerieAddress, string XSerieAddress, string bubbleSizeAddress)
        {
            if (_list.Count == 256)
            {
                throw (new InvalidOperationException("Charts have a maximum of 256 series."));
            }
            XmlElement  ser  = _node.OwnerDocument.CreateElement("c", "ser", ExcelPackage.schemaChart);
            XmlNodeList node = _node.SelectNodes("c:ser", _ns);

            if (node.Count > 0)
            {
                _node.InsertAfter(ser, node[node.Count - 1]);
            }
            else
            {
                var f = XmlHelperFactory.Create(_ns, _node);
                f.InserAfter(_node, "c:varyColors,c:grouping,c:barDir,c:scatterStyle,c:ofPieType", ser);
            }

            //If the chart is added from a chart template, then use the chart templates series xml
            if (!string.IsNullOrEmpty(_chart._drawings._seriesTemplateXml))
            {
                ser.InnerXml = _chart._drawings._seriesTemplateXml;
            }

            int idx = FindIndex();

            ser.InnerXml = string.Format("<c:idx val=\"{1}\" /><c:order val=\"{1}\" /><c:tx><c:strRef><c:f></c:f><c:strCache><c:ptCount val=\"1\" /></c:strCache></c:strRef></c:tx>{2}{5}{0}{3}{4}", AddExplosion(Chart.ChartType), idx, AddSpPrAndScatterPoint(Chart.ChartType), AddAxisNodes(Chart.ChartType), AddSmooth(Chart.ChartType), AddMarker(Chart.ChartType));
            ExcelChartSerie serie;

            switch (Chart.ChartType)
            {
            case eChartType.Bubble:
            case eChartType.Bubble3DEffect:
                serie = new ExcelBubbleChartSerie(_chart, _ns, ser, _isPivot)
                {
                    Bubble3D   = Chart.ChartType == eChartType.Bubble3DEffect,
                    Series     = SerieAddress,
                    XSeries    = XSerieAddress,
                    BubbleSize = bubbleSizeAddress
                };
                break;

            case eChartType.XYScatter:
            case eChartType.XYScatterLines:
            case eChartType.XYScatterLinesNoMarkers:
            case eChartType.XYScatterSmooth:
            case eChartType.XYScatterSmoothNoMarkers:
                serie = new ExcelScatterChartSerie(_chart, _ns, ser, _isPivot);
                break;

            case eChartType.Radar:
            case eChartType.RadarFilled:
            case eChartType.RadarMarkers:
                serie = new ExcelRadarChartSerie(_chart, _ns, ser, _isPivot);
                break;

            case eChartType.Surface:
            case eChartType.SurfaceTopView:
            case eChartType.SurfaceTopViewWireframe:
            case eChartType.SurfaceWireframe:
                serie = new ExcelSurfaceChartSerie(_chart, _ns, ser, _isPivot);
                break;

            case eChartType.Pie:
            case eChartType.Pie3D:
            case eChartType.PieExploded:
            case eChartType.PieExploded3D:
            case eChartType.PieOfPie:
            case eChartType.Doughnut:
            case eChartType.DoughnutExploded:
            case eChartType.BarOfPie:
                serie = new ExcelPieChartSerie(_chart, _ns, ser, _isPivot);
                break;

            case eChartType.Line:
            case eChartType.LineMarkers:
            case eChartType.LineMarkersStacked:
            case eChartType.LineMarkersStacked100:
            case eChartType.LineStacked:
            case eChartType.LineStacked100:
            case eChartType.Line3D:
                serie = new ExcelLineChartSerie(_chart, _ns, ser, _isPivot);
                if (Chart.ChartType == eChartType.LineMarkers ||
                    Chart.ChartType == eChartType.LineMarkersStacked ||
                    Chart.ChartType == eChartType.LineMarkersStacked100)
                {
                    ((ExcelLineChartSerie)serie).Marker.Style = eMarkerStyle.Square;
                }
                ((ExcelLineChartSerie)serie).Smooth = ((ExcelLineChart)Chart).Smooth;
                break;

            case eChartType.BarClustered:
            case eChartType.BarStacked:
            case eChartType.BarStacked100:
            case eChartType.ColumnClustered:
            case eChartType.ColumnStacked:
            case eChartType.ColumnStacked100:
            case eChartType.BarClustered3D:
            case eChartType.BarStacked3D:
            case eChartType.BarStacked1003D:
            case eChartType.Column3D:
            case eChartType.ColumnClustered3D:
            case eChartType.ColumnStacked3D:
            case eChartType.ColumnStacked1003D:
            case eChartType.ConeBarClustered:
            case eChartType.ConeBarStacked:
            case eChartType.ConeBarStacked100:
            case eChartType.ConeCol:
            case eChartType.ConeColClustered:
            case eChartType.ConeColStacked:
            case eChartType.ConeColStacked100:
            case eChartType.CylinderBarClustered:
            case eChartType.CylinderBarStacked:
            case eChartType.CylinderBarStacked100:
            case eChartType.CylinderCol:
            case eChartType.CylinderColClustered:
            case eChartType.CylinderColStacked:
            case eChartType.CylinderColStacked100:
            case eChartType.PyramidBarClustered:
            case eChartType.PyramidBarStacked:
            case eChartType.PyramidBarStacked100:
            case eChartType.PyramidCol:
            case eChartType.PyramidColClustered:
            case eChartType.PyramidColStacked:
            case eChartType.PyramidColStacked100:
                serie = new ExcelBarChartSerie(_chart, _ns, ser, _isPivot);
                ((ExcelBarChartSerie)serie).InvertIfNegative = false;
                break;

            case eChartType.Area:
            case eChartType.Area3D:
            case eChartType.AreaStacked:
            case eChartType.AreaStacked100:
            case eChartType.AreaStacked1003D:
            case eChartType.AreaStacked3D:
                serie = new ExcelAreaChartSerie(_chart, _ns, ser, _isPivot);
                break;

            default:
                serie = new ExcelChartSerie(_chart, _ns, ser, _isPivot);
                break;
            }
            serie.Series  = SerieAddress;
            serie.XSeries = XSerieAddress;
            _list.Add((T)serie);
            if (_chart.StyleManager.StylePart != null)
            {
                _chart.StyleManager.ApplySeries();
            }
            return((T)serie);
        }
Пример #25
0
 /// <summary>
 /// Create the Xml Helper
 /// </summary>
 protected internal void CreateXmlHelper()
 {
     _xml = XmlHelperFactory.Create(_nsm, _topNode);
     _xml.SchemaNodeOrder = new string[] { "tickLblPos", "spPr", "txPr", "dLblPos", "crossAx", "printSettings", "showVal", "prstGeom", "noFill", "solidFill", "blipFill", "gradFill", "noFill", "pattFill", "ln", "prstDash", "blip", "srcRect", "tile", "stretch" };
     _xml.TopNode         = _xml.CreateNode(_fillPath + "/" + NodeName);
 }