L’impostazione dei dati utilizzati da un grafico a linea utilizzando EPPlus

Sto cercando di aggiungere una linea semplice grafico in excel automaticamente utilizzando EPPlus. Ho e conoscere l’intervallo di celle che contengono i dati che si desidera utilizzare. Voglio il grafico a guardare come il seguente:

L'impostazione dei dati utilizzati da un grafico a linea utilizzando EPPlus

Il Before e After colonne andare avanti per molto di più di ciò che viene mostrato.

Sto usando questo codice per creare il grafico e la posizione, ma non sono sicuro di come impostare i dati che il grafico utilizza:

ExcelChart ec = ws.Drawings.AddChart("Line Time Graph", OfficeOpenXml.Drawing.Chart.eChartType.Line);
ec.Title.Text = "Benchmarks";
ec.SetPosition(_times.Count + 2, 0, 1, 0);

Potrebbe avere qualcosa a che fare con ec.Series.Add, ma non so come usarlo correttamente. Se si potesse mi punto nella giusta direzione, che sarebbe grande.

InformationsquelleAutor matthewr | 2012-11-10

One Reply
  1. 10

    Spero che questo ti aiuta:

    ExcelChart ec = ws.Drawings.AddChart("Line Time Graph", OfficeOpenXml.Drawing.Chart.eChartType.Line);
    ec.Title.Text = "Benchmarks";
    ec.SetPosition(_times.Count + 2, 0, 1, 0);
    ec.SetSize(800, 600);
    
    var ran1 = sheet.Cells["A3:A10"];
    var ran2 = sheet.Cells["G3:G10"]; //label range if there is. Otherwise, let select blank range then edit XML data later to remove 'c:cat' tags (bellow example)
    
    var serie1 = ec.Series.Add(ran1, ran2);
    //use serie1 variable to format and so on
    //set serie1.HeaderAddress to A2 also
    
    var ran1 = sheet.Cells["B3:B10"];
    var serie2 = ec.Series.Add(ran1, ran2);
    //use serie2 variable to format and so on

    Un altro esempio completo ho appena testato:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using OfficeOpenXml;
    using System.IO;
    using OfficeOpenXml.Drawing.Chart;
    
    namespace TestExcelEPPluss
    {
        class Program
        {
            static void Main(string[] args)
            {
                ExcelPackage package = new ExcelPackage();
                var sheet = package.Workbook.Worksheets.Add("TestingGraph");
    
                Random r = new Random();
                var cell = sheet.Cells["A1"];
                cell.Value = "Before";
    
                cell = sheet.Cells["B1"];
                cell.Value = "After";
    
                for (int i = 0; i < 100; i++)
                {
                    cell = sheet.Cells[i + 2, 1];
                    cell.Value = r.Next(300, 500);
                    cell = sheet.Cells[i + 2, 2];
                    cell.Value = r.Next(300, 500);
                }
    
                ExcelChart ec = (ExcelLineChart)sheet.Drawings.AddChart("chart_1", eChartType.Line);
                ec.SetPosition(1, 0, 3, 0);
                ec.SetSize(800, 300);
                //ec.Legend.Add();
    
                var ran1 = sheet.Cells["A2:A101"];
                var ran2 = sheet.Cells["0:0"];
    
                var serie1 = (ExcelLineChartSerie)ec.Series.Add(ran1, ran2);
                serie1.Header = sheet.Cells["A1"].Value.ToString();
    
                ran1 = sheet.Cells["B2:B101"];
                var serie2 = ec.Series.Add(ran1, ran2);
                serie2.Header = sheet.Cells["B1"].Value.ToString();
    
                var xml = ec.ChartXml;
                var lst = xml.GetElementsByTagName("c:lineChart");
                foreach (System.Xml.XmlNode item in lst[0].ChildNodes)
                {
                    if (item.Name.Equals("ser"))
                    {
                        foreach (System.Xml.XmlNode subitem in item.ChildNodes)
                        {
                            if (subitem.Name.Equals("c:cat"))
                            {
                                item.RemoveChild(subitem);
                                break;
                            }
                        }
                    }
                }
    
                string path = @"C:\test1.xlsx";
                File.WriteAllBytes(path, package.GetAsByteArray());
                package.Dispose();
    
                Console.WriteLine("Done - Path: {0}", path);
                Console.ReadLine();
            }
        }
    }

    c:cat è la categoria per ser serie, lasciate rimuovere c:cat tag grafici xml, quindi il grafico utilizzare 1,2,3,4,5,... come predefinito per la categoria (asse x qui).

    Grazie, voglio provare questo al più presto. Dalla gamma di etichette vuoi dire che se voglio il grafico a specifici valori sull’asse x e y, come 1 2 3 4 5 6?
    E ‘ asse X i valori di gamma. Può essere null, quindi i valori di X sarà 1 2 3 4 5 6 ..., come nella foto che illustrano.
    Ho provato ma quando l’ho chiamata ec.Series.Add(ran1, null) si lancia una NullReferenceException. Io parto dal presupposto che è a causa della null passato. Sei sicuro che si può passare null?
    Ho solo pensato che funziona. Cerchiamo di passare un bianco, altrimenti si dovrebbe fare X intervallo di valori di conseguenza. Scusate per l’errore.
    Nessun problema, voglio provare presto o domani tardo qui).

    InformationsquelleAutor Han

Lascia un commento