Example #1
0
 internal ExcelStockChart(ExcelDrawings drawings, XmlNode node, eChartType?type, ExcelChart topChart, ExcelPivotTable PivotTableSource, XmlDocument chartXml, ExcelGroupShape parent = null) :
     base(drawings, node, type, topChart, PivotTableSource, chartXml, parent)
 {
     if (type == eChartType.StockVHLC || type == eChartType.StockVOHLC)
     {
         var barChart = new ExcelBarChart(this, _chartNode.PreviousSibling, parent);
         barChart.Direction = eDirection.Column;
         _plotArea          = new ExcelChartPlotArea(NameSpaceManager, ChartXml.SelectSingleNode("c:chartSpace/c:chart/c:plotArea", NameSpaceManager), barChart, "c", this);
     }
 }
Example #2
0
 internal ExcelStockChart(ExcelDrawings drawings, XmlNode node, Uri uriChart, ZipPackagePart part, XmlDocument chartXml, XmlNode chartNode, ExcelGroupShape parent = null) :
     base(drawings, node, uriChart, part, chartXml, chartNode, parent)
 {
     if (chartNode.LocalName == "barChart")
     {
         var barChart = new ExcelBarChart(this, chartNode, parent);
         barChart.Direction = eDirection.Column;
         _plotArea          = new ExcelChartPlotArea(NameSpaceManager, ChartXml.SelectSingleNode("c:chartSpace/c:chart/c:plotArea", NameSpaceManager), barChart, "c", this);
         _chartNode         = chartNode.NextSibling;
     }
 }
Example #3
0
        /// <summary>
        /// Fills a <see cref="OfficeOpenXml.Drawing.Chart.ExcelChartPlotArea"/> object with model data.
        /// </summary>
        /// <param name="plotArea"><see cref="OfficeOpenXml.Drawing.Chart.ExcelChartAxis"/> object.</param>
        /// <param name="model">Plots model definition.</param>
        private static void FormatFromModel(this ExcelChartPlotArea plotArea, ChartPlotsModel model)
        {
            plotArea.Fill.Color = model.Parent.GetBackColor();
            plotArea.Border.FormatFromModel(KnownChartElement.PlotArea, model.Border);

            var series = model.SelectMany(plot => plot.Series);

            foreach (var serie in series)
            {
                ChartHelper.AddSerieColor(serie);
            }
        }
Example #4
0
        internal ExcelChart(ExcelChart topChart, XmlNode chartNode)
            : base(topChart._drawings, topChart.TopNode, "xdr:graphicFrame/xdr:nvGraphicFramePr/xdr:cNvPr/@name")
        {
            UriChart = topChart.UriChart;
               Part = topChart.Part;
               ChartXml = topChart.ChartXml;
               _plotArea = topChart.PlotArea;
               _chartNode = chartNode;

               InitChartLoad(topChart._drawings, chartNode);
        }
Example #5
0
        private void CreateNewChart(ExcelDrawings drawings, eChartType type, ExcelChart topChart)
        {
            if (topChart == null)
               {
               XmlElement graphFrame = TopNode.OwnerDocument.CreateElement("graphicFrame", ExcelPackage.schemaSheetDrawings);
               graphFrame.SetAttribute("macro", "");
               TopNode.AppendChild(graphFrame);
               graphFrame.InnerXml = string.Format("<xdr:nvGraphicFramePr><xdr:cNvPr id=\"{0}\" name=\"Chart 1\" /><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.openxmlformats.org/drawingml/2006/chart\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:id=\"rId1\" />   </a:graphicData>  </a:graphic>",_id);
               TopNode.AppendChild(TopNode.OwnerDocument.CreateElement("clientData", ExcelPackage.schemaSheetDrawings));

               var package = drawings.Worksheet._package.Package;
               UriChart = GetNewUri(package, "/xl/charts/chart{0}.xml");

               ChartXml = new XmlDocument();
               ChartXml.PreserveWhitespace = ExcelPackage.preserveWhitespace;
               LoadXmlSafe(ChartXml, ChartStartXml(type), Encoding.UTF8);

               // save it to the package
               Part = package.CreatePart(UriChart, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", _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.schemaRelationships + "/chart");
               graphFrame.SelectSingleNode("a:graphic/a:graphicData/c:chart", NameSpaceManager).Attributes["r:id"].Value = chartRelation.Id;
               package.Flush();
               _chartNode = ChartXml.SelectSingleNode(string.Format("c:chartSpace/c:chart/c:plotArea/{0}", GetChartNodeText()), NameSpaceManager);
               }
               else
               {
               ChartXml = topChart.ChartXml;
               Part = topChart.Part;
               _plotArea = topChart.PlotArea;
               UriChart = topChart.UriChart;
               _axis = topChart._axis;

               XmlNode preNode = _plotArea.ChartTypes[_plotArea.ChartTypes.Count - 1].ChartNode;
               _chartNode = ((XmlDocument)ChartXml).CreateElement(GetChartNodeText(), ExcelPackage.schemaChart);
               preNode.ParentNode.InsertAfter(_chartNode, preNode);
               if (topChart.Axis.Length == 0)
               {
                   AddAxis();
               }
               string serieXML = GetChartSerieStartXml(type, int.Parse(topChart.Axis[0].Id), int.Parse(topChart.Axis[1].Id), topChart.Axis.Length>2?int.Parse(topChart.Axis[2].Id) : -1);
               _chartNode.InnerXml = serieXML;
               }
        }