用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);