コード例 #1
0
        /// <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
ファイル: ExcelControl.cs プロジェクト: mmsgau/EPPlus-1
        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
ファイル: ExcelChart.cs プロジェクト: mmsgau/EPPlus-1
 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
ファイル: ExcelControl.cs プロジェクト: mmsgau/EPPlus-1
 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
ファイル: ExcelChartExLegend.cs プロジェクト: mmsgau/EPPlus-1
        /// <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");
        }
コード例 #13
0
 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
ファイル: ExcelChartExSerie.cs プロジェクト: mmsgau/EPPlus-1
 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
ファイル: ExcelChartLegend.cs プロジェクト: jackjet870/EPPlus
        /// <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
ファイル: ExcelChartExSerie.cs プロジェクト: mmsgau/EPPlus-1
 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
ファイル: ExcelChartEx.cs プロジェクト: mmsgau/EPPlus-1
        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
ファイル: ExcelChartExSerie.cs プロジェクト: mmsgau/EPPlus-1
        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);
 }