Ich schreibe eine einfache Anwendung, die eine Textdatei, wandelt es in Data Table, führt einige Operationen darauf und dann konvertiert in Excel-Arbeitsblatt und zeichnet ein Diagramm. Um das zu erreichen, dass ich EPPlus bin mit 4.1.0Edit Legende eines Excel-Diagramm mit EPPlus
Hier ist der Code der Methode, die ich zum Zeichnen von Diagrammen verwenden:
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;
Dieses Verfahren ist ein Teil einer größeren Pipeline für ExcelPackage Verarbeitung und das ist, warum es ist keine Save() - oder Dispose() -Methode aufgerufen.
Der Punkt ist, dass auf der Legende des Diagramms erstellt alle Reihen werden als "Spalte A", "Spalte B" usw. trotz Einstellung Header-Eigenschaft zu etwas anderem gekennzeichnet. Es funktioniert gleich, egal ob ich den Header-Namen explizit oder über HeaderAdress spezifiziere.
Wie ändere ich Legendenbeschriftungen in meine benutzerdefinierten Namen? Oder wenn es mit EPPlus nicht möglich ist - gibt es einen anderen Rahmen, der eine solche Funktionalität hat? Hinweis: Ich habe die erstellte .xlsx-Datei mit OpenOffice 4 geöffnet, wenn das wichtig ist, ich habe keinen Zugang zu Microsoft Office.
Außerdem - ich habe es geschafft, meine Serie zu färben, obwohl es mit EPPlus unmöglich war. Kannst du mir sagen, was genau ich mit Border.Fill.Color färbe?