我正在编写一个简单的应用程序,它接受一个文本文件,将其转换为数据表,对其执行少量操作,然后转换为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做什么颜色?
答案 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);