用EPPlus编辑excel图表的图例

问题描述:

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

下面是我用绘制图表的方法的代码:

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()方法。

问题是,在图表的图例中,尽管将Header属性设置为其他值,但所有系列都标记为“列A”,“列B”等。无论我明确指定Header名称还是HeaderAdress,它的工作原理都是一样的。

如何将图例标签更改为我的自定义名称?或者EPPlus是不可能的 - 有没有其他的框架具有这种功能?注意:如果重要,我使用OpenOffice 4打开了创建的.xlsx文件,但我没有Microsoft Office的权限。

另外 - 我设法为我的系列着色,尽管EPPlus说它是不可能的。你能告诉我我用Border.Fill.Color做了什么颜色?

1号路)遍历所有的列一样,

//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"; 

...

您可以创建一个数据表与列名第二路) 你想,那么你填充你的数据,然后像下面加载它

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