Εισαγωγή

Αυτός ο οδηγός δείχνει πώς να δημιουργήσετε εγγενή διαγράμματα Word με Aspose.Words FOSS για .NET — τα ίδια αντικείμενα σχεδίασης που δημιουργεί το Word όταν χρησιμοποιείτε Εισαγωγή > Διάγραμμα — εξ ολοκλήρου από κώδικα. Ένα διάγραμμα που προστίθεται με αυτόν τον τρόπο δεν είναι εικόνα· είναι ένα αντικείμενο Chart ενσωματωμένο στο πακέτο OOXML του εγγράφου, με μοντέλο σειράς δεδομένων, άξονες, υπόμνημα και πίνακα δεδομένων που το Word μπορεί ακόμη να ανοίξει και να επεξεργαστεί μετά την αποθήκευση του αρχείου. Αυτή η ανάρτηση είναι μια εις βάθος ανάλυση του Chart API: πώς να δημιουργήσετε ένα διάγραμμα, να προσθέσετε δεδομένα σειράς και να προσεγγίσετε τα αντικείμενα άξονα, υπόμνημα, ετικέτα δεδομένων και μορφοποίησης που ελέγχουν την απόδοσή του.

Η βιβλιοθήκη είναι αδειοδοτημένη υπό MIT και δεν έχει εγγενείς εξαρτήσεις. Στοχεύει στο .NET Standard 2.0, έτσι ο κώδικας σε αυτήν την ανάρτηση εκτελείται αμετάβλητος στο .NET Framework 4.6.2+ και στο .NET 6, 8 και 10. Εγκαταστήστε την μέσω NuGet, ή δημιουργήστε την από τον πηγαίο κώδικα — δείτε το Γρήγορη Έναρξη παρακάτω. Ό,τι φαίνεται εδώ είναι η ίδια μηχανή διαγραμμάτων που χρησιμοποιείται από το εμπορικό Aspose.Words για .NET; αυτή η έκδοση περιλαμβάνει το πλήρες μοντέλο αντικειμένων διαγράμματος αλλά όχι τη διάταξη σελίδας ή την απόδοση, έτσι η θέση του διαγράμματος στη σελίδα δεν υπολογίζεται και το έγγραφο δεν μπορεί να εξαχθεί σε PDF ή εικόνα.


Τι Περιλαμβάνεται

Δημιουργία Διαγράμματος και Προσθήκη Σειράς Δεδομένων

DocumentBuilder.InsertChart(chartType, width, height) εισάγει ένα σχήμα διαγράμματος στη τρέχουσα θέση και επιστρέφει ένα Shape; η ιδιότητά του Chart είναι το σημείο εισόδου για όλα τα υπόλοιπα. Ένα νεοεισαγμένο διάγραμμα έχει ήδη μια προεπιλεγμένη σειρά, έτσι ο περισσότερος κώδικας την καθαρίζει πρώτα και προσθέτει τα δικά του δεδομένα μέσω Chart.Series, ενός ChartSeriesCollection.

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 });

ChartSeriesCollection.Add διαθέτει υπερφορτώσεις για ζεύγη κατηγορίας/τιμής (όπως παραπάνω), ζεύγη τιμών X/Y, σειρές με ημερομηνία και σειρές φυσαλίδων με επιπλέον τιμή μεγέθους. Σε ένα μεμονωμένο ChartSeries, τα Add(xValue), Add(xValue, yValue) και Add(xValue, yValue, bubbleSize) προσθέτουν μεμονωμένα σημεία, το Insert τοποθετεί ένα σημείο σε συγκεκριμένο δείκτη, και τα Clear() / ClearValues() αφαιρούν δεδομένα σειράς χωρίς απαραίτητα να αφαιρούν το ίδιο το αντικείμενο σειράς.

Τύποι Διαγραμμάτων και Τύποι Σειρών

ChartType — η απαρίθμηση (enum) που περνιέται στο InsertChart — έχει περίπου 40 μέλη που καλύπτουν τις τυπικές οικογένειες διαγραμμάτων του Word: Line, Bar, Column, Pie, Doughnut, Radar, Scatter, Stock, Surface, Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker, Waterfall και Funnel, καθώς και στοίβαξη, στοίβαξη σε ποσοστό και 3D παραλλαγές αρκετών από αυτές (Bar3D, ColumnStacked, Area3DPercentStacked, κ.λπ.).

Μία σχετική αλλά διακριτή απαρίθμηση, ChartSeriesType, εμφανίζεται στο ChartSeries.SeriesType και στο ChartSeriesGroup.SeriesType και περιγράφει τον τύπο μιας μεμονωμένης σειράς ή ομάδας σειρών αντί για ολόκληρο το διάγραμμα. Περιλαμβάνει τα ίδια μέλη με το ChartType συν δύο επιπλέον — ParetoLine και RegionMap — που το ChartType δεν εκθέτει άμεσα. Το ChartSeriesGroup είναι αυτό που καθιστά δυνατά τα συνδυαστικά διαγράμματα: το Chart.SeriesGroups (ένα ChartSeriesGroupCollection) κρατά μια ομάδα ανά τύπο σειράς στο διάγραμμα, και κάθε ομάδα έχει το δικό της ζεύγος AxisX/AxisY και ιδιότητες διάταξης όπως Overlap, GapWidth, BubbleScale και DoughnutHoleSize.

Άξονες, Γραμμές Πλέγματος και Κλιμάκωση

Chart.AxisX, AxisY και AxisZ (συμπεριλαμβανομένης της συλλογής Axes) επιστρέφουν αντικείμενα τύπου ChartAxis. Κάθε άξονας διαθέτει ένα Type (ChartAxisType.Category, Series ή Value), ρυθμίσεις σημείων διαίρεσης (MajorTickMark, MinorTickMarkCross, Inside, Outside ή None), σημαίες γραμμής πλέγματος (HasMajorGridlines, HasMinorGridlines) και έλεγχο μονάδας (MajorUnit, MinorUnit και τα αντίστοιχα *IsAuto). Το ChartAxis.Scaling επιστρέφει ένα αντικείμενο AxisScaling του οποίου τα Minimum και Maximum είναι τιμές AxisBound — το AxisBound.IsAuto αναφέρει εάν το όριο υπολογίζεται αυτόματα, και οι παραμετρικοί κατασκευαστές (AxisBound(value), AxisBound(datetime)) ορίζουν ένα ρητό αριθμητικό ή ημερομηνιακό όριο. Ένας άξονας κατηγορίας μπορεί να συνδεθεί με κείμενο ή χρονικές κατηγορίες μέσω του ChartAxis.CategoryType (AxisCategoryType.Automatic, Category ή Time), και το ChartAxis.Title εκθέτει ένα ChartAxisTitle με τα δικά του Text, Show και Font.

Υπόμνημα, Πίνακας Δεδομένων και Τίτλος Διαγράμματος

Chart.Legend επιστρέφει ένα ChartLegend, του οποίου το Position (ένα LegendPosition των None, Bottom, Left, Right, Top ή TopRight) καθορίζει πού αποδίδεται σε σχέση με την περιοχή σχεδίασης· το LegendEntries είναι ένα ChartLegendEntryCollection ατομικών αντικειμένων ChartLegendEntry, καθένα με το δικό του Font και τη σημαία IsHidden για απόκρυψη μιας μονής σειράς από το υπόμνημα χωρίς να αφαιρεθεί από το διάγραμμα. Το Chart.DataTable (ένα ChartDataTable) αποδίδει τις τιμές των σειρών ως πλέγμα κάτω από το διάγραμμα όταν είναι ορισμένο το Show, με τα HasLegendKeys, HasHorizontalBorder, HasVerticalBorder και HasOutlineBorder να ελέγχουν την εμφάνισή του. Το Chart.Title είναι ένα ChartTitle με ιδιότητες Text και Show, ακολουθώντας το ίδιο μοτίβο με τους τίτλους των αξόνων.

Ετικέτες Δεδομένων, Σημεία Δεδομένων και Δείκτες

ChartSeries.HasDataLabels ενεργοποιεί ετικέτες δεδομένων για μια σειρά, και ChartSeries.DataLabels (ένα ChartDataLabelCollection) ή ένα μεμονωμένο ChartDataLabel από αυτήν ελέγχει τι εμφανίζει κάθε ετικέτα: ShowValue, ShowCategoryName, ShowSeriesName, ShowPercentage, ShowLegendKey και ShowBubbleSize είναι ανεξάρτητες σημαίες, και Position (ChartDataLabelPosition.Center, InsideEnd, OutsideEnd, BestFit και άλλες) τοποθετεί την ετικέτα σε σχέση με το σημείο της. ChartSeries.DataPoints παρέχει πρόσβαση ανά σημείο μέσω ChartDataPoint, που φέρει τη δική του Marker (ένα ChartMarker με Symbol από την απαρίθμηση MarkerSymbol και ένα Size), Explosion (για την απομάκρυνση ενός κομματιού πίτας), και Format. Κάθε στοιχείο γραφήματος που μπορεί να γεμιστεί ή να περιγραφεί — σειρές, σημεία δεδομένων, η υπόμνηση, ο τίτλος, ο πίνακας δεδομένων — εκθέτει ένα ChartFormat μέσω της ιδιότητας Format, με ιδιότητες Fill, Stroke και ShapeType (ChartShapeType) και μια μέθοδο SetDefaultFill() για επαναφορά του. Ένα σημείο που αξίζει να γνωρίζετε: οι παραλλαγές χρώματος γεμίσματος και περιγράμματος συνδεδεμένες με το θέμα στο ChartFormat (FillableForeThemeColor, FillableBackThemeColor, StrokeForeThemeColor, StrokeBackThemeColor και τα αντίστοιχα αποχρώσεις/σκιές) δεν είναι υλοποιημένες σε αυτήν την έκδοση — ορίστε απλά χρώματα Fill/Stroke αντί για αναφορές χρωμάτων θέματος. Chart.Style (ένα ChartStyle όπως Muted, Saturated, Gradient, Outline ή Black) εφαρμόζει μια προκαθορισμένη εμφάνιση σε ολόκληρο το γράφημα με ένα βήμα.


Γρήγορη Έναρξη

Aspose.Words FOSS για .NET είναι διαθέσιμο μέσω NuGet:

dotnet add package Aspose.Words.FOSS

Για να δημιουργήσετε από τον πηγαίο κώδικα αντί αυτού:

git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release

Στη συνέχεια προσθέστε μια αναφορά έργου στο Aspose.Words.csproj από την εφαρμογή σας. Με την αναφορά στη θέση της, αυτό δημιουργεί ένα διάγραμμα γραμμής με μία σειρά και το αποθηκεύει σε DOCX:

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");
Console.WriteLine("Saved chart.docx");

Ανοίξτε το chart.docx στο Word και το διάγραμμα είναι πλήρως επεξεργάσιμο — κάντε δεξί κλικ επάνω του και επιλέξτε “Edit Data” για να δείτε τις ίδιες τρεις κατηγορίες και τιμές που γράφτηκαν παραπάνω.


Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφή
DOCX.docx
DOCM.docm
DOTX.dotx
DOTM.dotm
Flat OPC (όλες οι παραλλαγές)(διάφορα)
Markdown.md
Text.txt

Τα γραφήματα που δημιουργούνται με το Chart API είναι αντικείμενα σχεδίασης OOXML, έτσι διασχίζουν (round-trip) τα παραπάνω μορφότυπα της οικογένειας DOCX (DOCX, DOCM, DOTX, DOTM και Flat OPC). Αυτή η έκδοση δεν μπορεί να εξάγει σε PDF, XPS ή εικόνες και δεν μπορεί να εκτυπώσει, οπότε τίποτα δεν αποδίδει ένα γράφημα σε bitmap — το γράφημα παραμένει ένα ζωντανό, επεξεργάσιμο αντικείμενο μέσα στο αρχείο Word. Οι επιπλέον μετατροπείς μορφότυπων που αφαιρέθηκαν από αυτή την έκδοση (DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3 και WordML) είναι τα ίδια υποσυστήματα που εξαιρούνται παντού αλλού στη βιβλιοθήκη, δεν είναι κάτι συγκεκριμένο στα γραφήματα.


Ανοιχτός Κώδικας & Αδειοδότηση

Aspose.Words FOSS for .NET κυκλοφορεί υπό την άδεια MIT, δωρεάν για εμπορική και προσωπική χρήση χωρίς royalty ή περιορισμούς διανομής. Ο πλήρης κώδικας, συμπεριλαμβανομένων των κλάσεων γραφημάτων που αναφέρονται σε αυτή τη δημοσίευση, είναι διαθέσιμος στο GitHub στο Aspose.Words FOSS για .NET αποθετήριο.


Ξεκινώντας

Σχετικοί Πόροι