Πώς να εργαστείτε με πίνακες στο .NET

Πώς να εργαστείτε με πίνακες στο .NET

Αυτός ο οδηγός δείχνει πώς να δημιουργείτε, μορφοποιείτε και να διαβάζετε πίνακες προγραμματιστικά σε Aspose.Words FOSS για .NET, χρησιμοποιώντας το Table, Row, και Cell κλάσεις στο Aspose.Words.Tables χώρο ονομάτων μαζί με DocumentBuilder. Περιλαμβάνει την κατασκευή πίνακα από το μηδέν, τη μορφοποίηση κελιών και γραμμών καθώς δημιουργείτε, τον έλεγχο της διάταξης σε όλο τον πίνακα και AutoFit, τον ορισμό προτιμώμενων πλάτους, τη συγχώνευση κελιών και την ανάγνωση πινάκων που ήδη υπάρχουν σε ένα φορτωμένο έγγραφο.

Οδηγός βήμα-βήμα

Βήμα 1: Εγκατάσταση του πακέτου

Aspose.Words FOSS for .NET δεν έχει ακόμη κυκλοφορήσει ένα πακέτο NuGet – δημιουργήστε τη βιβλιοθήκη από την πηγή αντί για αυτό. Κλωνοποιήστε το https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, στη συνέχεια κατασκευάστε το Aspose.Words.sln σε διαμόρφωση Release με το SDK .NET και κάντε αναφορά στη δημιουργημένη συναρμολόγηση Aspose.Words από το έργο σας. Η βιβλιοθήκη στοχεύει στο .NET Standard 2.0, έτσι λειτουργεί στο .NET Framework 4.6.2+ και .NET 6/8/10.


Βήμα 2: Εισαγωγή απαιτούμενων κλάσεων

Προσθέστε μια οδηγία using Aspose.Words; για τις βασικές κλάσεις εγγράφου (Document, DocumentBuilder), και μια οδηγία using Aspose.Words.Tables; για τις κλάσεις ειδικές για πίνακες που καλύπτει αυτός ο οδηγός – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth, και τα σχετικά enums.


Βήμα 3: Δημιουργήστε έναν Νέο Πίνακα με DocumentBuilder

Δημιουργήστε ένα Document και ένα DocumentBuilder δεσμευμένο σε αυτό, στη συνέχεια καλέστε το DocumentBuilder.StartTable() για να ξεκινήσετε έναν πίνακα στον κέρσορα. Για κάθε κελί σε μια σειρά, καλέστε το DocumentBuilder.InsertCell(), μετά κλείστε τη σειρά με το DocumentBuilder.EndRow(). Επαναλάβετε για όσες σειρές χρειάζεται ο πίνακας, και κλείστε ολόκληρο τον πίνακα με το DocumentBuilder.EndTable(). Κάθε StartTable() χρειάζεται ένα αντίστοιχο EndTable(), και κάθε σειρά χρειάζεται ένα αντίστοιχο EndRow(), αλλιώς η εσωτερική κατάσταση του δημιουργού — και το αποτέλεσμα δέντρου εγγράφου — καταλήγει σε κακή δομή.


Βήμα 4: Διαμορφώστε τα Κελιά και τις Σειρές Καθώς Τα Δημιουργείτε

Ορίστε DocumentBuilder.CellFormat και DocumentBuilder.RowFormat πριν καλέσετε InsertCell() ή EndRow() για να εφαρμόσετε μορφοποίηση στα κελιά και τις σειρές που ο δημιουργός πρόκειται να δημιουργήσει — αυτές οι δύο ιδιότητες λειτουργούν ως πρότυπο για νέο περιεχόμενο, όχι ως αλλαγή με οπισθοαναδρομή στα ήδη εισαχθέντα κελιά. CellFormat εκθέτει Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth και τις τέσσερις ιδιότητες περιθωρίων (LeftPadding, RightPadding, TopPadding, BottomPadding), που μπορούν όλες να οριστούν ταυτόχρονα με το SetPaddings(). RowFormat εκθέτει Borders, Height, HeightRule, AllowBreakAcrossPages και HeadingFormat. Καλέστε το CellFormat.ClearFormatting() ή το RowFormat.ClearFormatting() για να επαναφέρετε την κάθε μία στις προεπιλογές πριν ορίσετε νέες τιμές για την επόμενη σειρά ή κελί.


Βήμα 5: Ορίστε τη Διάταξη σε Όλο τον Πίνακα και AutoFit

Μόλις υπάρχει ο πίνακας, ορίστε τις ιδιότητες διάταξης απευθείας στο αντικείμενο Table: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) και TextWrapping. Καλέστε το Table.SetBorders() για να εφαρμόσετε ένα στυλ περιγράμματος, πλάτος και χρώμα σε όλο τον πίνακα, ή το Table.SetBorder() για να ορίσετε μία μόνο πλευρά· τα ClearBorders() και ClearShading() τα επαναφέρουν. Το Table.AutoFit(AutoFitBehavior) αλλάζει το μέγεθος του πίνακα και των κελιών του σύμφωνα με τη επιλεγμένη συμπεριφορά — καλέστε το ξανά μετά από οποιαδήποτε δομική επεξεργασία, καθώς αντανακλά την κατάσταση του πίνακα μόνο τη στιγμή που εκτελείται, όχι συνεχώς.


Βήμα 6: Ορίστε τις Προτιμώμενες και Πλάτη Κελιών

Δημιουργήστε τιμές πλάτους με τις στατικές μεθόδους κατασκευής PreferredWidth.FromPercent() για μια διάταξη που προσαρμόζεται στο διαθέσιμο πλάτος σελίδας, ή PreferredWidth.FromPoints() για σταθερό πλάτος· το PreferredWidthType αναφέρει ποιο είδος τιμής (Auto, Percent ή Points) περιέχει ένα δεδομένο PreferredWidth. Αναθέστε το αποτέλεσμα είτε στο Table.PreferredWidth για ολόκληρο τον πίνακα είτε στο CellFormat.PreferredWidth για ένα κελί.


Βήμα 7: Συγχώνευση κελιών

Σημειώστε τα κελιά ως συγχωνευμένα ορίζοντας CellFormat.HorizontalMerge ή CellFormat.VerticalMerge (και τα δύο πληκτρολογημένα ως CellMerge) στα κελιά που πρέπει να συμμετέχουν στη συγχώνευση. Αν τα κελιά έδειξαν μόνο ότι είναι συγχωνευμένα ταιριάζοντας τα πλάτη τους αντί να έχουν επισημανθεί ρητά, καλέστε το Table.ConvertToHorizontallyMergedCells() για να μετατρέψετε αυτήν τη οπτική διάταξη σε κελιά με πραγματική κατάσταση CellMerge. Το CellVerticalAlignment ελέγχει πώς το περιεχόμενο ευθυγραμμίζεται κατακόρυφα μέσα σε ένα κελί, ανεξάρτητα από οποιαδήποτε συγχώνευση.


Βήμα 8: Ανάγνωση πινάκων από υπάρχον έγγραφο

Για να εργαστείτε με πίνακες που ήδη υπάρχουν σε ένα φορτωμένο έγγραφο, διαβάστε το Body.Tables (ή την ιδιότητα Tables σε οποιοδήποτε άλλο Story) — ένα TableCollection — αντί να δημιουργείτε καινούργιους. Το Table.Rows επιστρέφει ένα RowCollection και το Row.Cells επιστρέφει ένα CellCollection; και οι τρεις τύποι συλλογών υποστηρίζουν Add(), Insert(), Remove(), RemoveAt(), Contains() και IndexOf() για προγραμματιστικές επεξεργασίες. Μετά την αφαίρεση γραμμών ή κελιών, καλέστε το Table.EnsureMinimum(), Row.EnsureMinimum() ή Cell.EnsureMinimum() ώστε ο κόμβος να διατηρεί τη ελάχιστη έγκυρη δομή που αναμένει το Word — μια κενή γραμμή, ένα κενό κελί ή μια κενή παράγραφο, αντίστοιχα.

Συνηθισμένα προβλήματα και διορθώσεις

Ένα αποθηκευμένο έγγραφο φαίνεται παραμορφωμένο ή προκύπτει σφάλμα κατά την αποθήκευση Μια γραμμή ή ο ίδιος ο πίνακας δεν κλείστηκαν ποτέ. Πάντα ζευγαρώστε DocumentBuilder.StartTable() με ένα τελικό EndTable(), και κλείστε κάθε γραμμή με EndRow() πριν προχωρήσετε στην επόμενη ή κλείσετε τον πίνακα.

Τα νέα κελιά δεν υιοθετούν τη μορφοποίηση που έθεσα CellFormat and RowFormat άλλαξαν στο DocumentBuilder μετά την εισαγωγή των επηρεαζόμενων κελιών. Ορίστε DocumentBuilder.CellFormat / RowFormat πριν το InsertCell() or EndRow() κλήση που δημιουργεί το περιεχόμενο που θέλετε μορφοποιημένο.

Ο Πίνακας δεν αλλάζει μέγεθος όπως αναμένω μετά την επεξεργασία του περιεχομένου του Table.AutoFit(AutoFitBehavior) αντικατοπτρίζει τη δομή του πίνακα μόνο τη στιγμή που καλείται. Καλέστε το ξανά μετά από οποιαδήποτε δομική επεξεργασία — προσθήκη ή αφαίρεση γραμμών, κελιών ή περιεχομένου — αν χρειάζεται να επαναπροσαρμοστεί η διάταξη.

Τα κελιά που φαίνονται συγχωνευμένα συμπεριφέρονται ως ξεχωριστά κελιά όταν διαβάζονται ξανά Τα κελιά ταιριάχθηκαν μόνο με το πλάτος, χωρίς να επισημανθούν με CellMerge. Call Table.ConvertToHorizontallyMergedCells(), ή set CellFormat.HorizontalMerge / VerticalMerge ρητά στα κελιά που πρέπει να συγχωνευτούν.

Η αφαίρεση γραμμών ή κελιών αφήνει τον πίνακα σε μη έγκυρη κατάσταση Το Word αναμένει κάθε Table, Row, και Cell να διατηρήσει μια ελάχιστη έγκυρη δομή. Μετά την προγραμματισμένη αφαίρεση περιεχομένου, καλέστε EnsureMinimum() στον κόμβο που μόλις τροποποιήθηκε.

Συχνές Ερωτήσεις

Πώς μπορώ να δημιουργήσω έναν πίνακα από το μηδέν αντί να επεξεργαστώ έναν υπάρχοντα;

Χρησιμοποιήστε DocumentBuilder: καλέστε StartTable(), στη συνέχεια InsertCell() για κάθε κελί σε μια σειρά, EndRow() για κλείσιμο της σειράς, επαναλάβετε για πρόσθετες σειρές, και EndTable() για κλείσιμο του πίνακα.

Πώς μπορώ να λάβω τους πίνακες που υπάρχουν ήδη σε ένα φορτωμένο έγγραφο;

Διαβάστε την ιδιότητα Tables (ένα TableCollection) στο Body της ενότητας που σας ενδιαφέρει, ή σε οποιοδήποτε άλλο Story όπως μια κεφαλίδα ή υποσέλιδο.

Πώς μπορώ να ορίσω έναν πίνακα ως ποσοστό του πλάτους της σελίδας αντί για σταθερό πλάτος;

Αναθέστε Table.PreferredWidth = PreferredWidth.FromPercent(value) αντί για PreferredWidth.FromPoints(value).

Ποια είναι η διαφορά μεταξύ του καθορισμού των περιγραμμάτων με SetBorders και SetBorder;

Table.SetBorders() εφαρμόζει ένα στυλ γραμμής, πλάτος και χρώμα σε κάθε περίγραμμα του πίνακα ταυτόχρονα· Table.SetBorder() ορίζει μία μόνο πλευρά, επιτρέποντας σε διαφορετικές πλευρές να έχουν διαφορετική μορφοποίηση.

Πώς μπορώ να επαναφέρω τη μορφοποίηση σε ένα κελί ή μια σειρά πριν το ξαναχρησιμοποιήσω;

Καλέστε CellFormat.ClearFormatting() στο CellFormat του κελιού ή RowFormat.ClearFormatting() στο RowFormat της σειράς.

Δείτε επίσης

 Ελληνικά