Hallo zusammen,
ich schreibe in einer Win-Forms-Anwendung und mittels Interop.Excel in eine Exceldatei. Nachdem ich die Werte reingeschrieben habe – Datumsangaben (Format 15.01.2023 17:34:00) und eine Ganzzahl – soll ein Diagramm gezeichnet werden. Alles funktioniert prima, bis auf die Zeile, die die x-Achsen-Beschriftung aufs Format
Ich zeige euch die komplette Methode:
Edit: Ich hab den Fehler gesehen, jetzt, wo ich diese Frage gestellt habe: es muss heißen. Na, was soll's... Hat noch jemand Verbesserungsvorschläge für die Methode?
ich schreibe in einer Win-Forms-Anwendung und mittels Interop.Excel in eine Exceldatei. Nachdem ich die Werte reingeschrieben habe – Datumsangaben (Format 15.01.2023 17:34:00) und eine Ganzzahl – soll ein Diagramm gezeichnet werden. Alles funktioniert prima, bis auf die Zeile, die die x-Achsen-Beschriftung aufs Format
dd.mm.yy
setzen soll. Es kommt eine System.Reflection.TargetInvocationException
. Ich habe mal diese Änderung in Excel selbst vorgenommen und den Makrorekorder aufzeichnen lassen. Dies sind die nötigen Befehle... Ich verstehe nicht, warum das nicht geht. Ich habe es mit und ohne axis.Select();
versucht.Ich zeige euch die komplette Methode:
C#-Quellcode
- private static void Make_new_Chart(Worksheet sheet, string from, string to_)
- {
- Chart chart_ = sheet.Shapes.AddChart2(Style: 240,
- XlChartType: XlChartType.xlXYScatter,
- Left: 335,
- Top: 2,
- Width: 950,
- Height: 540,
- NewLayout: true).Chart;
- chart_.HasTitle = false;
- chart_.HasLegend = false;
- chart_.SetSourceData(sheet.Range[from, to_]);
- chart_.Parent.Border.Color = 0;
- chart_.Parent.Border.Weight = 3;
- int cnt = 1;
- foreach (Axis axis in chart_.Axes())
- {
- if (cnt == 2) // x-Achse
- {
- axis.HasTitle = true;
- axis.AxisTitle.Text = "Datum";
- axis.TickLabels.Font.Size = 8;
- axis.TickLabels.Font.Bold = false;
- axis.Select();
- axis.TickLabels.NumberFormat = "TT.MM.JJ;@";
- }
- else // y-Achse
- {
- axis.HasTitle = true;
- axis.AxisTitle.Text = "Anzahl";
- axis.TickLabels.Font.Size = 11;
- axis.TickLabels.Font.Bold = true;
- axis.MinimumScale = 0;
- }
- cnt++;
- axis.AxisTitle.Font.Size = 11;
- axis.AxisTitle.Font.Bold = true;
- axis.AxisTitle.Font.Name = "Segoe UI";
- axis.TickLabels.Font.Name = "Segoe UI";
- axis.MajorTickMark = XlTickMark.xlTickMarkCross;
- axis.Border.Color = 0; // schwarz
- axis.Border.LineStyle = 0;
- axis.Border.Weight = 2;
- }
- System.Drawing.Color black = System.Drawing.Color.FromArgb(0, 0, 0);
- chart_.SeriesCollection(1).MarkerBackgroundColor = black;
- chart_.SeriesCollection(1).MarkerForegroundColor = black;
- chart_.SeriesCollection(1).Format.Line.Visible = false;
- }
Edit: Ich hab den Fehler gesehen, jetzt, wo ich diese Frage gestellt habe: es muss heißen. Na, was soll's... Hat noch jemand Verbesserungsvorschläge für die Methode?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()