使用EPPlus编辑Excel图表的图例

时间:2017-10-08 20:08:30

标签: c# epplus

我正在编写一个简单的应用程序,它接受一个文本文件,将其转换为数据表,对其执行少量操作,然后转换为Excel工作表并绘制图表。 为了达到这个目的,我正在使用EPPlus 4.1.0

这是我用于绘制图表的方法的代码:

    public static ExcelPackage DrawChartTwoAxis(this ExcelPackage package)
    {
        if (package.Workbook.Worksheets.FirstOrDefault(ws => ws.Name == "Wykresy") != null)
        {
            package.Workbook.Worksheets.Delete("Wykresy");
        }
        ExcelWorksheet worksheetWithCharts = package.Workbook.Worksheets.Add("Wykresy");

        ExcelWorksheet worksheetWithData = package.Workbook.Worksheets["Dane"];

        var numberOfRows = package.Workbook.Worksheets["Dane"].Dimension.End.Row;
        var maxColumnLetter = package.Workbook.Worksheets["Dane"].Dimension.End.Address.ToCharArray()[0];
        var numberofColumns = package.Workbook.Worksheets["Dane"].Dimension.End.Column;

        ExcelChart chart = worksheetWithCharts.Drawings.AddChart("Zgrubny wykres", eChartType.LineMarkers);
        var chartType2 = chart.PlotArea.ChartTypes.Add(eChartType.LineMarkers);
        chartType2.UseSecondaryAxis = true;

        Random rand = new Random();

        for (int i = 2; i <= numberofColumns; i++)
        {
            if (worksheetWithData.Cells[1, i].Text.ToLower().Contains("pttk") ||
                worksheetWithData.Cells[1, i].Text.ToLower().Contains("pt100"))
            {
                var serie = chart.Series.Add(worksheetWithData.Cells[2, i, numberOfRows, i],
                    worksheetWithData.Cells[$"A2:A{numberOfRows}"]);
                serie.Border.Fill.Color = System.Drawing.Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256));
                serie.HeaderAddress = worksheetWithData.Cells[1, i];
            }
            else
            {
                var serie = chartType2.Series.Add(worksheetWithData.Cells[2, i, numberOfRows, i],
                    worksheetWithData.Cells[$"A2:A{numberOfRows}"]);
                serie.Border.Fill.Color = System.Drawing.Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256));
                serie.HeaderAddress = worksheetWithData.Cells[1, i];
            }
        }
        return package;

此方法是处理ExcelPackage的更大管道的一部分,这就是没有调用Save()或Dispose()方法的原因。

关键是在图表的图例中,它创建的所有系列都标记为&#34;列A&#34;,&#34;列B&#34;尽管将Header属性设置为其他内容。无论我是明确指定Header名称还是通过HeaderAdress指定它,它的工作方式都相同。

如何将图例标签更改为我的自定义名称?或者如果使用EPPlus是不可能的 - 是否还有其他具有此类功能的框架?注意:我使用OpenOffice 4打开创建的.xlsx文件,如果这很重要,我无法访问Microsoft Office。

此外 - 我设法为我的系列上色,尽管据说EPPlus不可能。你能告诉我究竟用Border.Fill.Color做什么颜色?

1 个答案:

答案 0 :(得分:0)

第一种方式)循环遍历所有列

    //ws is your excel sheet
    //in cells you put the column 
    ws.Cells["A1"].Value = "the column name";
ws.Cells["B1"].Value = "the column name";

...

第二路) 您可以使用所需的列名创建一个DataTable,然后将其填入数据,然后按如下所示加载

//ws is your excel sheet
//MyDt is your DataTable
ws.Cells["A1"].LoadFromDataTable(MyDt, true);