/// <summary>
        /// Перенести область графиков
        /// </summary>
        /// <param name="chartPart">Область графиков для перемещения</param>
        /// <param name="cellAddress">Позиция области графиков (ячейка, левый верхний край области)</param>
        /// <param name="columnOffset">Отклонение от левого края ячейки</param>
        /// <param name="rowOffset">Отклонение от верхнего края ячейки</param>
        /// <returns>true - если операция выполнилась успешно, false - в обратном случае.</returns>
        public static bool RelocateTo(this ChartPart chartPart, string cellAddress, long columnOffset = 0, long rowOffset = 0)
        {
            var columnNum = Utils.ToColumNum(cellAddress);
            var rowNum    = Utils.ToRowNum(cellAddress);

            return(chartPart.RelocateTo((int)columnNum, (int)rowNum, columnOffset, rowOffset));
        }
Esempio n. 2
0
        //fix the chart Data Regions
        public static void FixChartData(WorkbookPart workbookPart, int totalCount)
        {
            var wsparts = workbookPart.WorksheetParts.ToArray();

            foreach (WorksheetPart wsp in wsparts)
            {
                if (wsp.DrawingsPart != null)
                {
                    ChartPart chartPart = wsp.DrawingsPart.ChartParts.First();
                    ////change the ranges to accomodate the newly inserted data.
                    foreach (DocumentFormat.OpenXml.Drawing.Charts.Formula formula in chartPart.ChartSpace.Descendants <DocumentFormat.OpenXml.Drawing.Charts.Formula>())
                    {
                        if (formula.Text.Contains("$2"))
                        {
                            string s = formula.Text.Split('$')[1];
                            formula.Text += ":$" + s + "$" + totalCount;
                        }
                    }
                    chartPart.ChartSpace.Save();
                }
            }

            //ChartPart chartPart = workbookPart.ChartsheetParts.First().DrawingsPart.ChartParts.First();
            ////change the ranges to accomodate the newly inserted data.
            //foreach (DocumentFormat.OpenXml.Drawing.Charts.Formula formula in chartPart.ChartSpace.Descendants<DocumentFormat.OpenXml.Drawing.Charts.Formula>())
            //{
            //    if (formula.Text.Contains("$2"))
            //    {
            //        string s = formula.Text.Split('$')[1];
            //        formula.Text += ":$" + s + "$" + totalCount;
            //    }
            //}
            //chartPart.ChartSpace.Save();
        }
        /// <summary>
        /// Получить информацию о местоположении области с графиками
        /// </summary>
        /// <param name="chartPart">Область информацию которой нужно получить</param>
        /// <returns>Сведения о положении области графиков на листе</returns>
        public static TwoCellAnchor Anchor(this ChartPart chartPart)
        {
            if (chartPart == null)
            {
                return(null);
            }

            var drawingsPart = chartPart.GetParentParts().FirstOrDefault() as DrawingsPart;

            if (drawingsPart == null)
            {
                return(null);
            }

            var partId  = drawingsPart.GetIdOfPart(chartPart);
            var anchors = drawingsPart.WorksheetDrawing.Elements <TwoCellAnchor>();

            var theAnchor = anchors.FirstOrDefault(anc =>
            {
                var chartRef = anc.FirstDescendant <DrawingCharts.ChartReference>();
                if (chartRef == null)
                {
                    return(false);
                }
                return(chartRef.Id.Value == partId);
            });

            return(theAnchor);
        }
Esempio n. 4
0
        public IList <double> PointValues => _pointValues.Value; //TODO: delete setter

        #region Constructors

        public Series(ChartType type, OpenXmlElement sdkSeries, ChartPart sdkChartPart)
        {
            Check.NotNull(sdkSeries, nameof(sdkSeries));
            _sdkChartPart = sdkChartPart ?? throw new ArgumentNullException(nameof(sdkChartPart));
            _pointValues  = new Lazy <List <double> >(GetPointValues(sdkSeries));
            Type          = type;
        }
Esempio n. 5
0
        private static void CopyChart(string fromPresentation1, string toPresentation2)
        {
            using (PresentationDocument ppt1 = PresentationDocument.Open(fromPresentation1, false))
                using (PresentationDocument ppt2 = PresentationDocument.Open(toPresentation2, true))
                {
                    SlideId fromSlideId = ppt1.PresentationPart.Presentation.SlideIdList.GetFirstChild <SlideId>();
                    string  fromRelId   = fromSlideId.RelationshipId;

                    SlideId toSlideId = ppt2.PresentationPart.Presentation.SlideIdList.GetFirstChild <SlideId>();
                    string  toRelId   = fromSlideId.RelationshipId;

                    SlidePart fromSlidePart = (SlidePart)ppt1.PresentationPart.GetPartById(fromRelId);
                    SlidePart toSlidePart   = (SlidePart)ppt2.PresentationPart.GetPartById(fromRelId);

                    var graphFrame = fromSlidePart.Slide.CommonSlideData.ShapeTree.GetFirstChild <GraphicFrame>().CloneNode(true);
                    GroupShapeProperties groupShapeProperties = toSlidePart.Slide.CommonSlideData.ShapeTree.GetFirstChild <GroupShapeProperties>();
                    toSlidePart.Slide.CommonSlideData.ShapeTree.InsertAfter(graphFrame, groupShapeProperties);

                    ChartPart fromChartPart = fromSlidePart.ChartParts.First();
                    ChartPart toChartPart   = toSlidePart.AddNewPart <ChartPart>("rId2");


                    using (StreamReader streamReader = new StreamReader(fromChartPart.GetStream()))
                        using (StreamWriter streamWriter = new StreamWriter(toChartPart.GetStream(FileMode.Create)))
                        {
                            streamWriter.Write(streamReader.ReadToEnd());
                        }

                    EmbeddedPackagePart fromEmbeddedPackagePart1 = fromChartPart.EmbeddedPackagePart;
                    EmbeddedPackagePart toEmbeddedPackagePart1   = toChartPart.AddNewPart <EmbeddedPackagePart>("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "rId3");

                    using (StreamReader streamReader = new StreamReader(fromEmbeddedPackagePart1.GetStream()))
                        toEmbeddedPackagePart1.FeedData(streamReader.BaseStream);
                }
        }
Esempio n. 6
0
        /// <summary>
        /// Returns an instance of a <see cref="ChartModel"/> for the first chart with a specified chart id in a worksheet.
        /// </summary>
        /// <param name="ws">The <see cref="Worksheet"/> in which the chart resides</param>
        /// <param name="id">The chart id</param>
        /// <returns>The <see cref="ChartModel"/> that represents the chart</returns>
        public static ChartModel GetChartModel(Worksheet ws, string id)
        {
            Guard.IsNotNull(ws, "ws");
            Guard.IsNotNullOrEmpty(id, "id");

            ChartModel chartModel = null;
            ChartPart  chartPart  = GetChartPart(id, ws.WorksheetPart);

            if (chartPart != null)
            {
                // Get the Anchor that host the Graphic
                DrawingSpreadsheet.TwoCellAnchor anchor = GetHostingTwoCellAnchor(chartPart);

                // Get information about the chart
                IEnumerable <OpenXmlCompositeElement> chartElements = GetChartElements(chartPart);

                chartModel = new ChartModel(chartPart, anchor)
                {
                    Worksheet     = ws,
                    ChartId       = id,
                    ChartElements = chartElements,
                    IsValid       = true,
                };
            }

            return(chartModel);
        }
Esempio n. 7
0
        public static void majAreaChart(ChartPart cc, List <string> formules)
        {
            var bc = (OpenXmlElement)null;

            if (cc.ChartSpace.Descendants().OfType <Chart.AreaChart>().Count() != 0)
            {
                bc = cc.ChartSpace.Descendants <Chart.AreaChart>().First();
            }
            else
            {
                bc = cc.ChartSpace.Descendants <Chart.Area3DChart>().First();
            }

            for (int j = 0; j < (formules.Count - 1) / 2; j++)
            {
                Chart.AreaChartSeries newSerie = (Chart.AreaChartSeries)bc.Elements <Chart.AreaChartSeries>().First().CloneNode(true);

                newSerie.SeriesText.StringReference.Formula.Text = formules[2 * j + 1];
                newSerie.Index.Val = (uint)j;
                newSerie.Order.Val = (uint)j;
                newSerie.Descendants <Chart.CategoryAxisData>().First().NumberReference.Formula.Text = formules[0];
                newSerie.Descendants <Chart.Values>().First().NumberReference.Formula.Text           = formules[2 * j + 2];

                bc.Append(newSerie);
            }
            bc.Elements <Chart.AreaChartSeries>().First().Remove();
        }
Esempio n. 8
0
        protected override string ReplaceValuesInChartInSlide(ChartPart chartPart, string categoryTitle, int nSerie)
        {
            ChartSpace chartSpace = chartPart.ChartSpace;

            GraficoBarre myBarre = new GraficoBarre2d();

            myBarre.BarChartSpace = chartSpace;
            myBarre.getBarre();

            if (myBarre.Barre != null)
            {
                BarChartSeries barChartSeries1 = myBarre.barChartSeries1;

                SeriesText       seriesText1;
                CategoryAxisData categoryAxisData1;
                Values           values1;

                modificaChartData("0,0", "", out seriesText1, out categoryAxisData1, out values1);

                barChartSeries1.SeriesText = seriesText1;
                barChartSeries1.Append(categoryAxisData1);
                barChartSeries1.Append(values1);

                return("ok");
            }
            else
            {
                return("non trovo il grafico a barre!");
            }
        }
Esempio n. 9
0
        //inuilisé mais peut etre pour les metacharts avec des séries de types diférent
        public void aiguillageSeriesParType(ChartPart cp, List <string> formules, List <string> typesSeries)
        {
            if (typesSeries.Count == (formules.Count - 1) / 2)
            {
                List <int> auto = new List <int>();
                for (int i = 0; i < typesSeries.Count; i++)
                {
                    if (typesSeries[i] == "")
                    {
                        auto.Add(i);
                    }
                }

                List <string> formuleAuto = new List <string>()
                {
                    formules[0]
                };
                foreach (int i in auto)
                {
                    formuleAuto.Add(formules[2 * i + 1]);
                    formuleAuto.Add(formules[2 * i + 2]);
                }
                XcelWin.majMetaChart(cp, formules);
            }
            else
            {
                Console.WriteLine("Erreure Inconnue, fonction aiguillageSeriesParType");
            }
        }
Esempio n. 10
0
 public static void majMetaChart(ChartPart cc, List <string> formules)
 {
     if (cc.ChartSpace.Descendants().OfType <Chart.BarChart>().Count() != 0)
     {
         majBarChart(cc, formules);
     }
     else if (cc.ChartSpace.Descendants().OfType <Chart.Bar3DChart>().Count() != 0)
     {
         majBarChart(cc, formules);
     }
     else if (cc.ChartSpace.Descendants().OfType <Chart.LineChart>().Count() != 0)
     {
         majLineChart(cc, formules);
     }
     else if (cc.ChartSpace.Descendants().OfType <Chart.Line3DChart>().Count() != 0)
     {
         majLineChart(cc, formules);
     }
     else if (cc.ChartSpace.Descendants().OfType <Chart.ScatterChart>().Count() != 0)
     {
         majScatterChart(cc, formules);
     }
     else
     {
         majAreaChart(cc, formules);
     }
 }
Esempio n. 11
0
        public static void fixChartData(ChartPart cc, string nomSheet, List <int> elems, string colValeur, string colLegende)
        {
            Chart.Values v = cc.ChartSpace.Descendants <Chart.Values>().First();

            //Formule de mon piechart
            Chart.Formula f = v.Descendants <Chart.Formula>().First();

            string formulaBis = "\'" + nomSheet + "\'!$" + colValeur + "$" + elems.ElementAt(0);

            foreach (int i in elems.Skip(1))
            {
                formulaBis += ",\'" + nomSheet + "\'!$" + colValeur + "$" + i;
            }

            f.Text = formulaBis;

            //Formule pour les legendes
            Chart.CategoryAxisData cad = cc.ChartSpace.Descendants <Chart.CategoryAxisData>().First();

            //Formule des legendes de mon piechart
            Chart.Formula f2 = cad.Descendants <Chart.Formula>().First();

            string formula2Bis = "\'" + nomSheet + "\'!$" + colLegende + "$" + elems.ElementAt(0);

            foreach (int i in elems.Skip(1))
            {
                formula2Bis += ",\'" + nomSheet + "\'!$" + colLegende + "$" + i;
            }
            f2.Text = formula2Bis;

            Chart.SeriesText st = cc.ChartSpace.Descendants <Chart.SeriesText>().First();

            st.StringReference.Formula.Text = "";
        }
Esempio n. 12
0
        public static void supprChart(WorksheetPart worksheetPart, string titre)
        {
            DrawingsPart a = worksheetPart.DrawingsPart;

            DrawingsPart            dp  = worksheetPart.DrawingsPart;
            IEnumerable <ChartPart> cps = a.ChartParts;

            ChartPart b = null;

            foreach (ChartPart cp in cps)
            {
                if (cp.ChartSpace.Descendants <Chart.Chart>().First().Descendants <Chart.Title>().First().Descendants <DocumentFormat.OpenXml.Drawing.Run>().First().Text.Text == titre)
                {
                    b = cp;
                }
            }

            //obtention id du modèle
            string id = a.GetIdOfPart(b);

            a.DeletePart(b);

            //Suppression de l'ancre associée
            DocumentFormat.OpenXml.Drawing.Spreadsheet.WorksheetDrawing wsd = a.WorksheetDrawing;
            foreach (Draw.TwoCellAnchor tca in wsd.Elements <Draw.TwoCellAnchor>())
            {
                string tmp = tca.Descendants <Chart.ChartReference>().First().Id;
                if (tmp == id)
                {
                    tca.Remove();
                }
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Gets the id of the chart reference for the <see cref="ChartPart"/>
        /// </summary>
        /// <param name="chartPart">The <see cref="ChartPart"/></param>
        /// <returns>The chart reference id</returns>
        private static string GetChartReferenceId(ChartPart chartPart)
        {
            // DrawingPart is parent of ChartPart, and WorksheetPart parent of DrawingParts
            var drawingsPart = chartPart.GetParentParts().FirstOrDefault();

            return(drawingsPart.GetIdOfPart(chartPart));
        }
Esempio n. 14
0
        private void insertObjectChoices(ChartSheetContentSequence chartSheetContentSequence)
        {
            _writer.WriteStartElement(Dml.SpreadsheetDrawing.ElGraphicFrame, Dml.SpreadsheetDrawing.Ns);
            {
                // TODO: add graphic properties
                _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElNvGraphicFramePr, Dml.SpreadsheetDrawing.Ns);
                {
                    _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElCNvPr, Dml.SpreadsheetDrawing.Ns);
                    _writer.WriteAttributeString(Dml.DocumentProperties.AttrId, this._drawingsPart.RelId.ToString());
                    _writer.WriteAttributeString(Dml.DocumentProperties.AttrName, "Shape");
                    _writer.WriteEndElement(); // xdr:cNvPr

                    _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElCNvGraphicFramePr, Dml.SpreadsheetDrawing.Ns);
                    _writer.WriteStartElement(Dml.Prefix, Dml.DocumentProperties.ElGraphicFrameLocks, Dml.Ns);
                    _writer.WriteAttributeString(Dml.DocumentProperties.AttrNoGrp, "1");
                    _writer.WriteEndElement(); // a:graphicFrameLocks
                    _writer.WriteEndElement(); // xdr:cNvGraphicFramePr
                }
                _writer.WriteEndElement();     // xdr:nvGraphicFramePr

                // xdr:xfrm
                _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElXfrm, Dml.SpreadsheetDrawing.Ns);
                {
                    _writer.WriteStartElement(Dml.Prefix, Dml.BaseTypes.ElOff, Dml.Ns);
                    _writer.WriteAttributeString(Dml.BaseTypes.AttrX, "0");
                    _writer.WriteAttributeString(Dml.BaseTypes.AttrY, "0");
                    _writer.WriteEndElement(); // a:off

                    _writer.WriteStartElement(Dml.Prefix, Dml.BaseTypes.ElExt, Dml.Ns);
                    _writer.WriteAttributeString(Dml.BaseTypes.AttrCx, "0");
                    _writer.WriteAttributeString(Dml.BaseTypes.AttrCy, "0");
                    _writer.WriteEndElement(); // a:ext
                }
                _writer.WriteEndElement();     // xdr:xfrm


                _writer.WriteStartElement(Dml.GraphicalObject.ElGraphic, Dml.Ns);
                {
                    _writer.WriteStartElement(Dml.GraphicalObject.ElGraphicData, Dml.Ns);
                    _writer.WriteAttributeString(Dml.GraphicalObject.AttrUri, Dml.Chart.Ns);

                    // create and convert chart part
                    ChartPart    chartPart    = this._drawingsPart.AddChartPart();
                    ChartContext chartContext = new ChartContext(chartPart, chartSheetContentSequence, this._isChartsheet ? ChartContext.ChartLocation.Chartsheet : ChartContext.ChartLocation.Embedded);
                    chartSheetContentSequence.Convert(new ChartMapping(this._xlsContext, chartContext));

                    _writer.WriteStartElement(Dml.Chart.Prefix, Dml.Chart.ElChart, Dml.Chart.Ns);
                    _writer.WriteAttributeString("r", "id", OpenXmlNamespaces.Relationships, chartPart.RelIdToString);

                    _writer.WriteEndElement(); // c:chart

                    _writer.WriteEndElement(); // a:graphicData
                }
                _writer.WriteEndElement();     // a:graphic
            }
            _writer.WriteEndElement();         // a:graphicFrame

            _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElClientData, Dml.SpreadsheetDrawing.Ns, string.Empty);
        }
Esempio n. 15
0
        public static void CreateLineChart(DrawingsPart part, string formulaCat, string formulaVal, int row, bool newe, string title)
        {
            ChartPart chartPart1 = part.AddNewPart <ChartPart>();

            GenerateChartPartContentLine(chartPart1, formulaCat, formulaVal, title);

            GeneratePartContentPie(part, chartPart1, row, newe);
        }
Esempio n. 16
0
        private void Init()
        {
            // Get chart part
            C.ChartReference cChartReference = _pGraphicFrame.GetFirstChild <A.Graphic>().GetFirstChild <A.GraphicData>()
                                               .GetFirstChild <C.ChartReference>();
            ChartPart = (ChartPart)Slide.SlidePart.GetPartById(cChartReference.Id);

            C.PlotArea cPlotArea = ChartPart.ChartSpace.GetFirstChild <C.Chart>().PlotArea;
            _cXCharts = cPlotArea.Where(e => e.LocalName.EndsWith("Chart", StringComparison.Ordinal));
        }
Esempio n. 17
0
        /// <summary>
        /// Creates a deep copy of this <see cref="ChartModel"/> and associated chart in the worksheet.
        /// </summary>
        /// <param name="targetWorksheet">The worksheet into which the clone will be placed. If null, the cloned <see cref="ChartModel"/> will be based on the original <see cref="Worksheet"/>/></param>
        /// <returns>The <see cref="ChartModel"/> that represents the chart</returns>
        public ChartModel Clone(Worksheet targetWorksheet)
        {
            // If no target worksheet is supplied, clone in situ (ie. on the current worksheet)
            Worksheet cloneToWorksheet = targetWorksheet == null ? this.worksheet : targetWorksheet;

            // Name of the source and target worksheet (for debugging)
            string sourceWorksheetName = this.worksheet.WorksheetPart.GetSheetName();
            string targetWorksheetName = cloneToWorksheet.WorksheetPart.GetSheetName();

            System.Diagnostics.Debug.Print("ChartModel - Cloning chart on worksheet '{0}' into '{1}'", sourceWorksheetName, targetWorksheetName);

            // Create a DrawingPart in the target worksheet if it does not already exist
            if (cloneToWorksheet.WorksheetPart.DrawingsPart == null)
            {
                var drawingsPart = cloneToWorksheet.WorksheetPart.AddNewPart <DrawingsPart>();
                drawingsPart.WorksheetDrawing = new DrawingSpreadsheet.WorksheetDrawing();

                // if a drawings part is being created then we need to add a Drawing to the end of the targetworksheet
                DocumentFormat.OpenXml.Spreadsheet.Drawing drawing = new DocumentFormat.OpenXml.Spreadsheet.Drawing()
                {
                    Id = cloneToWorksheet.WorksheetPart.GetIdOfPart(cloneToWorksheet.WorksheetPart.DrawingsPart)
                };

                cloneToWorksheet.Append(drawing);
            }

            // Take copy elements
            ChartPart chartPart2 = cloneToWorksheet.WorksheetPart.DrawingsPart.AddNewPart <ChartPart>();

            chartPart2.FeedData(this.chartPart.GetStream());

            // Clone the anchor for the template chart to get a new chart anchor
            DrawingSpreadsheet.TwoCellAnchor anchor2 = (DrawingSpreadsheet.TwoCellAnchor) this.anchor.CloneNode(true);

            // Insert the cloned anchor into the worksheet drawing of the DrawingsPart.
            cloneToWorksheet.WorksheetPart.DrawingsPart.WorksheetDrawing.Append(anchor2);

            // Update the ChartReference in the Anchor 2 (TwoCellAnchor -> GraphicFrame -> Graphic -> GraphicData -> ChartReference)
            DrawingCharts.ChartReference chartReference2 = anchor2.Descendants <DrawingCharts.ChartReference>().FirstOrDefault();
            chartReference2.Id = cloneToWorksheet.WorksheetPart.DrawingsPart.GetIdOfPart(chartPart2);

            // Get information about the cloned chart
            IEnumerable <OpenXmlCompositeElement> chartElements = GetChartElements(chartPart2);

            // Wrap and return as a model
            ChartModel chartModel = new ChartModel(chartPart2, anchor2)
            {
                Worksheet     = cloneToWorksheet,
                ChartId       = this.ChartId,
                ChartElements = chartElements,
                IsValid       = true,
            };

            return(chartModel);
        }
Esempio n. 18
0
        private void Init()
        {
            var chartPartRef = _grFrame.GetFirstChild <A.Graphic>().GetFirstChild <A.GraphicData>().GetFirstChild <C.ChartReference>().Id;

            _sdkChartPart = (ChartPart)_shapeContext.SkdSlidePart.GetPartById(chartPartRef);

            _cChart           = _sdkChartPart.ChartSpace.GetFirstChild <C.Chart>();
            _sdkCharts        = _cChart.PlotArea.Where(e => e.LocalName.EndsWith("Chart", StringComparison.Ordinal)).ToList(); // example: <c:barChart>, <c:lineChart>
            _seriesCollection = new Lazy <SeriesCollection>(GetSeriesCollection);
            _categories       = new Lazy <CategoryCollection>(TryGetCategories);
        }
Esempio n. 19
0
 /// <summary>
 /// Updates the sources.
 /// </summary>
 /// <param name="chartPart">The chart part.</param>
 /// <param name="oldSourceName">Old name of the source.</param>
 /// <param name="newSourceName">New name of the source.</param>
 /// <param name="tableRowCount">The table row count.</param>
 public static void UpdateSources(this ChartPart chartPart, string oldSourceName, string newSourceName, int?tableRowCount)
 {
     // try and get a chart
     DocumentFormat.OpenXml.Drawing.Charts.Chart chart = chartPart.ChartSpace.GetFirstChild <DocumentFormat.OpenXml.Drawing.Charts.Chart>();
     // if there is one
     if (chart != null)
     {
         // update any sources on it to ensure formula and ranges are correct
         Helpers.UpdateDataSourcesForChildren(chart, oldSourceName, newSourceName, tableRowCount);
     }
 }
        protected static ChartPart CreateChartPart(DrawingsPart drawingsPart)
        {
            ChartPart chartPart = drawingsPart.AddNewPart <ChartPart>();

            chartPart.ChartSpace = new ChartSpace();
            chartPart.ChartSpace.Append(new EditingLanguage()
            {
                Val = new StringValue("en-US")
            });
            return(chartPart);
        }
Esempio n. 21
0
        public Series(ChartType type, OpenXmlElement sdkSeries, ChartPart sdkChartPart, IChartRefParser chartRefParser)
        {
            _sdkSeries = sdkSeries ?? throw new ArgumentNullException(nameof(sdkSeries));
            Check.NotNull(sdkSeries, nameof(sdkSeries));
            Check.NotNull(sdkChartPart, nameof(sdkChartPart));

            _sdkChartPart   = sdkChartPart ?? throw new ArgumentNullException(nameof(sdkChartPart));
            _chartRefParser = chartRefParser;
            _pointValues    = new Lazy <List <double> >(GetPointValues);
            _name           = new Lazy <string>(GetNameOrDefault);
            Type            = type;
        }
Esempio n. 22
0
        public static void temporaire2(ChartPart cp)
        {
            Chart.PlotArea pa = cp.ChartSpace.Descendants <Chart.PlotArea>().First();

            uint valAx = pa.GetFirstChild <Chart.ValueAxis>().AxisId.Val;
            uint catAx = pa.GetFirstChild <Chart.CategoryAxis>().AxisId.Val;

            pa.Descendants <Chart.BarChart>().First().Remove();

            Chart.BarChart bc = GenerateBarChart(catAx, valAx);
            pa.Append(bc);
        }
        /// <summary>
        /// Перенести область графиков
        /// </summary>
        /// <param name="chartPart">Область графиков для перемещения</param>
        /// <param name="topLeft">Левая верхняя позиция</param>
        /// <param name="bottomRight">Нижняя правая позиция</param>
        /// <returns>true - если операция выполнилась успешно, false - в обратном случае.</returns>
        public static bool RelocateTo(this ChartPart chartPart, Drawing.Spreadsheet.FromMarker topLeft, Drawing.Spreadsheet.ToMarker bottomRight)
        {
            var theAnchor = chartPart.Anchor();

            if (theAnchor == null)
            {
                return(false);
            }

            theAnchor.FromMarker = topLeft;
            theAnchor.ToMarker   = bottomRight;
            return(true);
        }
Esempio n. 24
0
        public Chart AddChart(string chartName, string rid)
        {
            ChartPart chartPart = mainPart.AddNewPart <ChartPart>(rid);
            //EmbeddedPackagePart embeddedPackagePart1 = chartPart.AddNewPart<EmbeddedPackagePart>("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "rId3");
            //GenerateEmbeddedPackagePart1Content(embeddedPackagePart1);
            Paragraph paragraph = new Paragraph()
            {
                RsidParagraphAddition = "00C75AEB", RsidRunAdditionDefault = "000F3EFF"
            };

            // Create a new run that has an inline drawing object
            Run     run     = new Run();
            Drawing drawing = new Drawing();

            dw.Inline inline = new dw.Inline();
            inline.Append(new dw.Extent()
            {
                Cx = 5274310L, Cy = 3076575L
            });
            inline.Append(new dw.EffectExtent()
            {
                LeftEdge = 0, TopEdge = 0, RightEdge = 2540, BottomEdge = 9525
            });
            dw.DocProperties docPros = new dw.DocProperties()
            {
                Id = 6666, Name = chartName
            };
            inline.Append(docPros);
            inline.Append(new dw.NonVisualGraphicFrameDrawingProperties());

            d.Graphic     g           = new d.Graphic();
            d.GraphicData graphicData = new d.GraphicData()
            {
                Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart"
            };
            dc.ChartReference chartReference = new dc.ChartReference()
            {
                Id = rid
            };
            graphicData.Append(chartReference);

            g.Append(graphicData);
            inline.Append(g);
            drawing.Append(inline);
            run.Append(drawing);
            paragraph.Append(run);

            body.AppendChild(paragraph);
            return(new Chart(chartPart));
        }
Esempio n. 25
0
        public string GetSingleString(C.StringReference strRef, ChartPart chartPart)
        {
            var fromCache = strRef.StringCache?.GetFirstChild <C.StringPoint>().Single().InnerText;

            if (fromCache != null)
            {
                return(fromCache);
            }

            var formula       = strRef.Formula;
            var cellStrValues = GetCellStrValues(formula, chartPart.EmbeddedPackagePart);

            return(cellStrValues.Single());
        }
        public IChartVisual AppendChartVisual(string name)
        {
            ChartPart chartPart = this.container.Part.AddNewPartDefaultId <ChartPart>();

            chartPart.ChartSpace = new Charts.ChartSpace()
            {
                Date1904 = new Charts.Date1904()
                {
                    Val = false
                }
            }
            .AppendChildFluent(
                new Charts.Chart()
            {
                PlotArea        = new Charts.PlotArea(),
                DisplayBlanksAs = new Charts.DisplayBlanksAs()
                {
                    Val = Charts.DisplayBlanksAsValues.Gap
                }
            }
                );

            Charts.Chart chart = new Charts.Chart();
            chart.SetAttribute(new OpenXmlAttribute("r", "id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships", this.container.Part.GetIdOfPart(chartPart)));

            GraphicFrame graphicFrame = this.shapeTree.AppendChild(new GraphicFrame()
            {
                NonVisualGraphicFrameProperties = new NonVisualGraphicFrameProperties()
                {
                    NonVisualDrawingProperties = new NonVisualDrawingProperties()
                    {
                        Name = name,
                        Id   = 6 // TODO: calculate
                    },
                    NonVisualGraphicFrameDrawingProperties = new NonVisualGraphicFrameDrawingProperties(),
                    ApplicationNonVisualDrawingProperties  = new ApplicationNonVisualDrawingProperties()
                },
                Graphic = new Drawing.Graphic()
                {
                    GraphicData = new Drawing.GraphicData()
                    {
                        Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart"
                    }
                    .AppendChildFluent(chart)
                }
            });

            return(new OpenXmlChartVisual(this.container, graphicFrame));
        }
Esempio n. 27
0
        public string modifica_Grafico(string path, string nomeSlide, string titoloSerie, int nChart, int nSerie)
        {
            PresentationDocument presentationDoc = null;

            try
            {
                presentationDoc = PresentationDocument.Open(path, true);

                SlidePart theSlidePart = PPointDocument.getSlidePart(presentationDoc, nomeSlide);

                if (theSlidePart != null)
                {
                    if (theSlidePart.ChartParts.Count() > 0)
                    {
                        ChartPart chartPart = theSlidePart.ChartParts.Skip(nChart).FirstOrDefault();

                        if (ReplaceValuesInChartInSlide(chartPart, titoloSerie, nSerie) == "ok")
                        {
                            presentationDoc.PresentationPart.Presentation.Save();
                            return(string.Format("ok grafico {0} {1}", nomeSlide, titoloSerie));
                        }
                        else
                        {
                            return(string.Format("non trovo il grafico nella slide '{0}'", nomeSlide));
                        }
                    }
                    else
                    {
                        return(string.Format("non trovo nessun grafico nella slide '{0}'", nomeSlide));
                    }
                }
                else
                {
                    return(string.Format("non trovo la slide '{0}'", nomeSlide));
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
            finally
            {
                if (presentationDoc != null)
                {
                    presentationDoc.Dispose();
                }
            }
        }
Esempio n. 28
0
        public void exec(System.Data.DataTable dt)
        {
            System.IO.File.Copy(template, copie, true);
            SpreadsheetDocument myWorkbook   = SpreadsheetDocument.Open(copie, true);
            WorkbookPart        workbookPart = myWorkbook.WorkbookPart;

            WorksheetPart wsPart = XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1");

            //DocumentFormat.OpenXml.Spreadsheet.Columns columns = new Columns();
            //for(int i=0;i<size.Length;i++)
            //{
            //    DocumentFormat.OpenXml.Spreadsheet.Column c = new Column();
            //    c.CustomWidth = true;
            //    c.Min = (uint) i+1;
            //    c.Max = (uint) i+1;
            //    c.Width = size[i];

            //    columns.Append(c);
            //}

            //DocumentFormat.OpenXml.Spreadsheet.Columns cc = new Columns();
            //cc.Append(new DocumentFormat.OpenXml.Spreadsheet.Column() { Min = 1, Max = 3, CustomWidth = true, Width = 5 });
            ////wsPart.Worksheet.Append(cc);
            //Worksheet ws = wsPart.Worksheet;
            //ws.Append(cc);



            DrawingsPart drawingsPart1 = wsPart.AddNewPart <DrawingsPart>("rId1");

            XcelWin.GenerateDrawingsPart1Content(drawingsPart1);

            ChartPart chartPart1 = drawingsPart1.AddNewPart <ChartPart>("rId1");

            XcelWin.GenerateChartPart1Content(chartPart1);

            Drawing drawing1 = new Drawing()
            {
                Id = "rId1"
            };

            wsPart.Worksheet.Append(drawing1);



            workbookPart.Workbook.Save();
            myWorkbook.Close();
        }
Esempio n. 29
0
        public void SetChartLocation(DrawingsPart drawingsPart, ChartPart chartPart, SpreadsheetLocation location)
        {
            drawingsPart.WorksheetDrawing = new WorksheetDrawing();
            TwoCellAnchor twoCellAnchor = drawingsPart.WorksheetDrawing.AppendChild <TwoCellAnchor>(new TwoCellAnchor());

            // Chart position
            twoCellAnchor.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.FromMarker(new ColumnId(location.ColumnIndex.ToString()),
                                                                                           new ColumnOffset("0"),
                                                                                           new RowId(location.RowIndex.ToString()),
                                                                                           new RowOffset("114300")));
            twoCellAnchor.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.ToMarker(new ColumnId((location.ColumnIndex + 12).ToString()),
                                                                                         new ColumnOffset("0"),
                                                                                         new RowId((location.RowIndex + 15).ToString()),
                                                                                         new RowOffset("0")));

            DocumentFormat.OpenXml.Drawing.Spreadsheet.GraphicFrame graphicFrame =
                twoCellAnchor.AppendChild <DocumentFormat.OpenXml.
                                           Drawing.Spreadsheet.GraphicFrame>(new DocumentFormat.OpenXml.Drawing.
                                                                             Spreadsheet.GraphicFrame());
            graphicFrame.Macro = "";

            // Chart name
            graphicFrame.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameProperties(
                                    new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualDrawingProperties()
            {
                Id = new UInt32Value(2u), Name = "Chart 1"
            },
                                    new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameDrawingProperties()));

            graphicFrame.Append(new Transform(new Offset()
            {
                X = 0L, Y = 0L
            },
                                              new Extents()
            {
                Cx = 0L, Cy = 0L
            }));

            graphicFrame.Append(new Graphic(new GraphicData(new ChartReference()
            {
                Id = drawingsPart.GetIdOfPart(chartPart)
            })
            {
                Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart"
            }));

            twoCellAnchor.Append(new ClientData());
        }
        protected static void AppendGraphicFrame(DrawingsPart drawingsPart, ChartPart chartPart)
        {
            TwoCellAnchor twoCellAnchor = drawingsPart.WorksheetDrawing.AppendChild(new TwoCellAnchor());

            twoCellAnchor.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.FromMarker(new ColumnId("2"),
                                                                                           new ColumnOffset("158233"),
                                                                                           new RowId("2"),
                                                                                           new RowOffset("16894")));
            twoCellAnchor.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.ToMarker(new ColumnId("17"),
                                                                                         new ColumnOffset("276225"),
                                                                                         new RowId("32"),
                                                                                         new RowOffset("0")));

            // Append a GraphicFrame to the TwoCellAnchor object.
            DocumentFormat.OpenXml.Drawing.Spreadsheet.GraphicFrame graphicFrame =
                twoCellAnchor.AppendChild <DocumentFormat.OpenXml.
                                           Drawing.Spreadsheet.GraphicFrame>(new DocumentFormat.OpenXml.Drawing.
                                                                             Spreadsheet.GraphicFrame());
            graphicFrame.Macro = "";

            graphicFrame.Append(new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameProperties(
                                    new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualDrawingProperties()
            {
                Id   = new UInt32Value(3u),
                Name = "Chart 1"
            },
                                    new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameDrawingProperties()));

            graphicFrame.Append(new Transform(new Offset()
            {
                X = 0L, Y = 0L
            },
                                              new Extents()
            {
                Cx = 0L, Cy = 0L
            }));

            graphicFrame.Append(
                new Graphic(new GraphicData(new ChartReference()
            {
                Id = drawingsPart.GetIdOfPart(chartPart)
            })
            {
                Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart"
            }));

            twoCellAnchor.Append(new ClientData());
        }