我正在編寫一個簡單的應用程序,它接受一個文本文件,將其轉換爲數據表,對其執行少量操作,然後轉換爲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做了什麼顏色?