c# - 使用 EPPlus 设置折线图使用的数据

标签 c# excel epplus

我正在尝试使用 EPPlus 在 excel 中自动添加一个简单的折线图。我知道包含我要使用的数据的单元格范围。我希望图表如下所示:

enter image description here

BeforeAfter 列比显示的要多得多。

我正在使用这段代码来创建图表并定位它,但我不确定如何设置图表使用的数据:

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.Series.Add 有关,但我不确定如何正确使用它。如果您能为我指出正确的方向,那就太好了。

最佳答案

希望对你有帮助:

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

我刚刚测试过的另一个完整示例:

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:catser 系列的类别,让我们从图表 xml 中删除 c:cat 标签,然后您的图表将使用 1,2,3,4,5,... 作为类别的默认值(此处为 x 轴)。

关于c# - 使用 EPPlus 设置折线图使用的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321179/

相关文章:

c# - 为什么我的数据透视表字段名称被视为无效和/或我的数据被视为未组织为带有标签列的列表?

php - Yii2:phpoffice/phpexcel 将 .xlsx 文件识别为 HTML

.net - 使用 EPPlus 时如何设置列类型

javascript - 拒绝加载样式表,因为它违反了内容安全策略

c# - Concox TR06 GPS定位器解码4字节纬度/4字节经度

c# - 将 C# DynamicObject 转换为任意类型

excel - VBA 用户表单中的问题 - 分辨率完全改变

python - xlwings 与 openpyxl 阅读 Excel 工作簿的区别

c# - EPPlus - 按索引而不是按字母顺序处理多列

c# - 如何生成Excel epplus C#新表,每张表内容不同