选择EPPlus图表(饼图,条形图)(B2,B36,B38)..等excel单元格

时间:2016-11-29 15:55:55

标签: charts epplus

我有类似于以下链接的问题。

EPPlus chart from list of single excel cells. How?

我尝试了代码,但它在图表中显示了两次。例如:

此代码显示excel图表 - >选择数据 - >水平(类别)轴标签选项卡显示100,100,300,600写入。这是什么原因?该图表是第一个数据的两倍,我没有找到问题的解决方案。

1 个答案:

答案 0 :(得分:0)

我想你刚刚发现了EPPlus的一个错误。对于我没有注意到你引用的那篇文章感到羞耻。似乎在使用Excel联合范围选择器(用逗号分隔的单元名称)时,ExcelRange类的迭代器返回对第一个单元格的双引用,在本例中为B2

解决方法是使用Series.Add的另一个重载,它将占用两个字符串范围。这是一个单元测试,显示问题和解决方法:

[TestMethod]
public void Chart_From_Cell_Union_Selector_Bug_Test()
{
    var existingFile = new FileInfo(@"c:\temp\Chart_From_Cell_Union_Selector_Bug_Test.xlsx");
    if (existingFile.Exists)
        existingFile.Delete();

    using (var pck = new ExcelPackage(existingFile))
    {
        var myWorkSheet = pck.Workbook.Worksheets.Add("Content");
        var ExcelWorksheet = pck.Workbook.Worksheets.Add("Chart");

        //Some data
        myWorkSheet.Cells["A1"].Value = "A";
        myWorkSheet.Cells["A2"].Value = 100; myWorkSheet.Cells["A3"].Value = 400; myWorkSheet.Cells["A4"].Value = 200; myWorkSheet.Cells["A5"].Value = 300; myWorkSheet.Cells["A6"].Value = 600; myWorkSheet.Cells["A7"].Value = 500;
        myWorkSheet.Cells["B1"].Value = "B";
        myWorkSheet.Cells["B2"].Value = 300; myWorkSheet.Cells["B3"].Value = 200; myWorkSheet.Cells["B4"].Value = 1000; myWorkSheet.Cells["B5"].Value = 600; myWorkSheet.Cells["B6"].Value = 500; myWorkSheet.Cells["B7"].Value = 200;

        //Pie chart shows with EXTRA B2 entry due to problem with ExcelRange Enumerator
        ExcelRange values = myWorkSheet.Cells["B2,B4,B6"];  //when the iterator is evaluated it will return the first cell twice: "B2,B2,B4,B6"
        ExcelRange xvalues = myWorkSheet.Cells["A2,A4,A6"]; //when the iterator is evaluated it will return the first cell twice: "A2,A2,A4,A6"
        var chartBug = ExcelWorksheet.Drawings.AddChart("Chart BAD", eChartType.Pie);
        chartBug.Series.Add(values, xvalues);
        chartBug.Title.Text = "Using ExcelRange";

        //Pie chart shows correctly when using string addresses and avoiding ExcelRange
        var chartGood = ExcelWorksheet.Drawings.AddChart("Chart GOOD", eChartType.Pie);
        chartGood.SetPosition(10, 0, 0, 0);
        chartGood.Series.Add("Content!B2,Content!B4,Content!B6", "Content!A2,Content!A4,Content!A6");
        chartGood.Title.Text = "Using String References";

        pck.Save();
    }
}

这是输出:

enter image description here

我会将它作为一个问题发布在他们的codeplex页面上,看看他们是否可以在下一个版本中修复它。