Arbeiten mit Diagrammen
Arbeiten mit Diagrammen
Aspose.Words FOSS für .NET kann native Word-Diagramme einfügen — dieselben DrawingML Diagramme, die Word selbst erstellt — als Form im Zeichenlayer. DocumentBuilder.InsertChart erstellt die Form und gibt sie zurück; die Chart-Eigenschaft der Form stellt Serien, Achsen, Legende und Formatierung bereit. Dieser Leitfaden behandelt das Erstellen eines Diagramms, die Auswahl eines Diagrammtyps, die Arbeit mit Serien und Datenpunkten, Achsen und Gitternetzlinien sowie die Formatierung von Diagrammelementen.
Ein Diagramm erstellen
Rufen Sie DocumentBuilder.InsertChart(chartType, width, height) auf, um eine Diagrammform an der Cursorposition einzufügen und das enthaltene Shape zurückzubekommen. Seine Chart-Eigenschaft ist das Chart-Objekt, das Sie konfigurieren. Ein frisch eingefügtes Diagramm enthält Platzhalter-Demo-Serien, daher sollten Sie Chart.Series löschen, bevor Sie reale Daten mit ChartSeriesCollection.Add(seriesName, categories, values) hinzufügen:
using Aspose.Words;
using Aspose.Words.Drawing.Charts;
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;
// Delete default generated series.
chart.Series.Clear();
string[] categories = new string[] { "AW Category 1", "AW Category 2", "AW Category 3" };
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });
doc.Save("chart.docx");Dieses Beispiel erstellt ein Document, verwendet DocumentBuilder.InsertChart(ChartType.Line, 432, 252), um eine Liniendiagramm-Form einzufügen, liest shape.Chart, um das Chart-Objekt zu erhalten, ruft chart.Series.Clear() auf, um die Platzhalter-Serie zu entfernen, fügt mit chart.Series.Add(seriesName, categories, values) eine reale Serie hinzu und schreibt das Ergebnis mit Document.Save.
Diagrammtypen
ChartType deckt die Standard-Word-Diagrammfamilien ab — Line, Bar, Column (plus deren Stacked, PercentStacked und 3D Varianten), Pie, PieOfPie, Doughnut, Area, Scatter, Bubble, Radar, Stock, Surface und die neueren Word-2016-Diagrammtypen Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker und Waterfall. Übergeben Sie den gewünschten Wert als chartType-Argument an InsertChart; es gibt keine Möglichkeit, den Typ eines bereits eingefügten Diagramms nachträglich zu ändern, außer die Form zu ersetzen.
Serien und Datenpunkte
Chart.Series ist ein ChartSeriesCollection von ChartSeries Objekten. Neben der oben verwendeten Add(seriesName, categories, values)-Überladung hat ChartSeriesCollection außerdem Überladungen für X/Y-Wertpaare, Daten und Blasengrößen sowie Insert, Remove(index) und Clear(). Jede ChartSeries stellt DataPoints (ein ChartDataPointCollection) für die Formatierung pro Punkt bereit — Format, Marker, Explosion und InvertIfNegative — und HasDataLabels / DataLabels, um ein ChartDataLabelCollection (ShowValue, ShowCategoryName, ShowPercentage, Position) zu aktivieren und zu konfigurieren.
Achsen und Gitternetzlinien
Chart.AxisX, AxisY und AxisZ sind ChartAxis-Objekte (mit Chart.Axes als ChartAxisCollection zum Durchlaufen aller). Jede Achse hat HasMajorGridlines / HasMinorGridlines, MajorUnit / MinorUnit (mit passenden *IsAuto-Flags), Crosses / CrossesAt, CategoryType und ein TickLabels-Objekt (AxisTickLabels) für Beschriftungs-Schriftart und -Ausrichtung. ChartAxis.Title (ChartAxisTitle) legt den Achsentitel-Text über seine Text- und Show-Eigenschaften fest.
Legende, Titel und Datentabelle
Chart.Title (ChartTitle) legt die Gesamtbeschriftung des Diagramms fest – Text, Show und Font. Chart.Legend (ChartLegend) steuert, ob und wo die Legende erscheint, über Position (ein LegendPosition-Wert wie Bottom, Right oder Top) und stellt einzelne LegendEntries bereit. Chart.DataTable (ChartDataTable) kann die zugrunde liegenden Serienwerte als Tabelle unterhalb des Plotbereichs anzeigen, mit Show, HasLegendKeys und Rahmen-Umschaltern.
Formatierung von Diagrammelementen
Die meisten Diagrammelemente — Serien, Datenpunkte, Achsen, der Titel und die Legende — stellen eine Format-Eigenschaft vom Typ ChartFormat bereit, die wiederum Fill und Stroke für die Farben dieses Elements offenlegt, sowie ein ShapeType (ChartShapeType) für die Formen der Datenpunkt-Marker. ChartFormat.SetDefaultFill() setzt ein Element auf sein themenbasiertes Standard-Aussehen zurück.
Tipps und bewährte Verfahren
- Löschen oder ersetzen Sie immer die Platzhalterserie (
chart.Series.Clear()), bevor Sie echte Daten hinzufügen — ein frisch eingefügtes Diagramm enthält bereits Beispieldaten. - Verwenden Sie
ChartSeriesCollection.Add-Überladungen, die zu Ihrer Datenstruktur passen (Kategorien, X/Y-Paare, Datumsangaben oder Blasengrößen), anstatt alles über Kategorie/Wert-Paare zu zwingen. - Legen Sie
HasDataLabels = truefür eine Serie fest, bevor Sie derenDataLabels-Sammlung konfigurieren — die Anzeigeeigenschaften der Sammlung haben keine sichtbare Wirkung, solange die Beschriftungen deaktiviert sind. - Lesen Sie
Chart.ChartSpaceoder prüfen Sie das spezifischeChartType, bevor Sie sich auf das Verhalten von Gitternetzlinien oder Achsen verlassen, das zwischen klassischen und Word-2016-Diagrammen variiert. - Bevorzugen Sie
ChartFormat.SetDefaultFill()statt jedes Füllattribut manuell zu leeren, wenn Sie das Aussehen eines Elements zurücksetzen möchten.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Neues Diagramm zeigt unerwartete Demo-Daten | InsertChart initialisiert das Diagramm mit Platzhalter-Serien | Rufen Sie chart.Series.Clear() auf, bevor Sie Ihre eigenen Serien hinzufügen |
| Datenbeschriftungen werden nicht angezeigt | HasDataLabels wurde nicht auf die Serie gesetzt, bevor DataLabels konfiguriert wurde | Setze series.HasDataLabels = true, dann konfiguriere ShowValue/ShowCategoryName auf series.DataLabels |
| Gitterlinien werden auf der Werteachse nicht angezeigt | HasMajorGridlines/HasMinorGridlines haben standardmäßig den Wert false für diese Achse | Setze chart.AxisY.HasMajorGridlines = true (und HasMinorGridlines, falls nötig) |
| Legende wird nicht angezeigt | Chart.Legend.Position ist auf LegendPosition.None gesetzt | Setze Position auf Bottom, Right, Top, Left oder TopRight |
FAQ
Wie füge ich ein Diagramm in ein Dokument ein?
Rufen Sie DocumentBuilder.InsertChart(chartType, width, height) auf. Es gibt das enthaltende Shape zurück; lesen Sie dessen Chart-Eigenschaft, um das Diagramm zu konfigurieren.
Wie füge ich einem Diagramm Daten hinzu?
Leeren Sie die Platzhalterserie mit chart.Series.Clear() und rufen Sie dann chart.Series.Add(seriesName, categories, values) auf (oder eine der anderen Add-Überladungen für X/Y-, Datums- oder Blasendaten).
Welche Diagrammtypen stehen zur Verfügung?
ChartType enthält die klassischen Familien (Line, Bar, Column, Pie, Area, Scatter, Bubble, Radar, Stock, Surface, plus deren gestapelte und 3D-Varianten) und die Word-2016-Diagrammtypen (Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker, Waterfall).
Wie ändere ich, wo die Legende angezeigt wird?
Setzen Sie Chart.Legend.Position auf einen LegendPosition-Wert, z.B. LegendPosition.Bottom oder LegendPosition.Right.
Kann ich einen einzelnen Datenpunkt anders formatieren als den Rest seiner Serie?
Ja — indexiere in ChartSeries.DataPoints (ein ChartDataPointCollection) und setze die Format, Marker oder Explosion dieses ChartDataPoint unabhängig von der Formatierung auf Serienebene.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
DocumentBuilder.InsertChart | Fügt eine Diagrammform an der Cursorposition ein und gibt sie zurück. |
Chart | Das Diagrammkonfigurationsobjekt, erreichbar über Shape.Chart. |
ChartType | Enum der verfügbaren Diagrammtypen (Linie, Balken, Kreis und Word-2016-Diagrammtypen). |
ChartSeriesCollection / ChartSeries | Die Datenreihen des Diagramms und Methoden, um sie hinzuzufügen, einzufügen oder zu entfernen. |
ChartDataPointCollection / ChartDataPoint | Formatierung pro Punkt innerhalb einer Serie. |
ChartDataLabelCollection / ChartDataLabel | Wert-/Kategorielabels, die auf Diagrammpunkten angezeigt werden. |
ChartAxis / ChartAxisCollection | Achsenkonfiguration — Gitternetzlinien, Einheiten, Schnittpunkt, Achsenbeschriftungen. |
ChartLegend / LegendPosition | Sichtbarkeit und Position der Legende. |
ChartTitle | Die Gesamtkaption des Diagramms. |
ChartDataTable | Optionale Tabelle mit Serienwerten, die unter dem Diagrammbereich angezeigt wird. |
ChartFormat | Füll-, Strich- und Formformatierung, die von den meisten Diagrammelementen gemeinsam verwendet wird. |