Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EPPlus设置线图使用的数据_C#_Excel_Epplus - Fatal编程技术网

C# 使用EPPlus设置线图使用的数据

C# 使用EPPlus设置线图使用的数据,c#,excel,epplus,C#,Excel,Epplus,我正在尝试使用EPPlus在excel中自动添加一个简单的折线图。我拥有并知道包含我想要使用的数据的单元格范围。我希望图表如下所示: 在之前的和之后的列所显示的内容要多得多 我正在使用此代码创建图形并对其进行定位,但我不确定如何设置图形使用的数据: ExcelChart ec = ws.Drawings.AddChart("Line Time Graph", OfficeOpenXml.Drawing.Chart.eChartType.Line); ec.Title.Text = "Bench

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

在之前的
之后的
列所显示的内容要多得多

我正在使用此代码创建图形并对其进行定位,但我不确定如何设置图形使用的数据:

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();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用OfficeOpenXml;
使用System.IO;
使用OfficeOpenXml.Drawing.Chart;
命名空间TestExcelepplus
{
班级计划
{
静态void Main(字符串[]参数)
{
ExcelPackage=新的ExcelPackage();
var sheet=package.Workbook.Worksheets.Add(“TestingGraph”);
随机r=新随机();
变量单元格=表单元格[“A1”];
cell.Value=“Before”;
单元=薄板单元[“B1”];
cell.Value=“After”;
对于(int i=0;i<100;i++)
{
单元=薄板单元[i+2,1];
cell.Value=r.Next(300500);
单元=薄板单元[i+2,2];
cell.Value=r.Next(300500);
}
ExcelChart ec=(ExcelLineChart)sheet.Drawings.AddChart(“图表1”,eChartType.Line);
ec.设定位置(1,0,3,0);
ec.设置尺寸(800300);
//ec.Legend.Add();
var ran1=薄板单元[“A2:A101”];
var ran2=表单元格[“0:0”];
var serie1=(ExcelLineChartSerie)ec.Series.Add(ran1,ran2);
serie1.Header=sheet.Cells[“A1”].Value.ToString();
ran1=片状细胞[“B2:B101”];
var serie2=ec.Series.Add(等级1,等级2);
serie2.Header=sheet.Cells[“B1”].Value.ToString();
var xml=ec.ChartXml;
var lst=xml.GetElementsByTagName(“c:lineChart”);
foreach(lst[0].ChildNodes中的System.Xml.XmlNode项)
{
if(item.Name.Equals(“ser”))
{
foreach(item.ChildNodes中的System.Xml.XmlNode子项)
{
if(子项名称等于(“c:cat”))
{
项目.搬迁儿童(分项);
打破
}
}
}
}
字符串路径=@“C:\test1.xlsx”;
writealBytes(路径,package.GetAsByteArray());
package.Dispose();
WriteLine(“Done-Path:{0}”,Path);
Console.ReadLine();
}
}
}

c:cat
ser
系列的类别,让我们从图表xml中删除
c:cat
标记,然后您的图表将使用
1,2,3,4,5,…
作为类别的默认值(此处为x轴)。

谢谢,我很快就会尝试。标签范围是指如果我希望图形在x轴和y轴上有特定的值,例如
123456
?它是x轴值范围。它可以是空的,那么X值将是
123456…
就像你的插图中那样。我已经测试过了,但是当我调用
ec.Series.Add(ran1,null)
时,它会抛出一个
NullReferenceException
。我假设这是因为传递了
null
。你确定你可以传递空值吗?我只是觉得它可以。让我们尝试通过一个空白范围,否则您应该使X值的范围相应。对不起,我弄错了。没问题,我会很快或明天(很晚了)试一试。