Εργασία με Πίνακες
Εργασία με Πίνακες
Πίνακες σε Aspose.Words FOSS για .NET αναπαρίστανται από το Aspose.Words.Tables χώρο ονομάτων: Table, Row, και Cell διαμορφώνουν μια ιεραρχία σύνθετων κόμβων τριών επιπέδων που βρίσκεται στο δέντρο του εγγράφου παράλληλα με τις παραγράφους. Αυτή η σελίδα καλύπτει τη δημιουργία πινάκων με DocumentBuilder, μορφοποίηση γραμμών και κελιών, έλεγχο της διάταξης σε όλο τον πίνακα και συγχώνευση κελιών.
Το Μοντέλο Αντικειμένου Πίνακα
Ένα Table είναι ένα CompositeNode που περιέχει κόμβους Row, και κάθε Row είναι ένα CompositeNode που περιέχει κόμβους Cell; ένα Cell με τη σειρά του περιέχει παραγράφους και, ενδεχομένως, ενσωματωμένους πίνακες. Το Table.Rows επιστρέφει ένα RowCollection, το Row.Cells επιστρέφει ένα CellCollection, και ένα Body ή άλλο Story αποκαλύπτει κάθε πίνακα κορυφαίου επιπέδου μέσα του μέσω της ιδιότητας Tables, ένα TableCollection. Όλες οι τρεις συλλογές υποστηρίζουν Add(), Insert(), Remove(), RemoveAt(), Contains() και IndexOf(). Τα Table.EnsureMinimum(), Row.EnsureMinimum() και Cell.EnsureMinimum() συμπληρώνουν το μικρότερο έγκυρο περιεχόμενο που χρειάζεται ένας κόμβος αυτού του τύπου (μια κενή γραμμή, ένα κενό κελί ή μια κενή παράγραφο, αντίστοιχα) αφού οι προγραμματιστικές επεξεργασίες αφήσουν έναν χωρίς αυτό.
Δημιουργία Πινάκων με DocumentBuilder
DocumentBuilder.StartTable() ξεκινά έναν νέο πίνακα στον κέρσορα, το InsertCell() προσθέτει ένα κελί στην τρέχουσα γραμμή, το EndRow() κλείνει την τρέχουσα γραμμή, και το EndTable() κλείνει τον πίνακα. Ορίστε τα DocumentBuilder.CellFormat και DocumentBuilder.RowFormat πριν καλέσετε τα InsertCell() ή EndRow() για να εφαρμόσετε την προεπιλεγμένη μορφοποίηση σε κελιά και γραμμές καθώς δημιουργούνται – αυτές οι ιδιότητες λειτουργούν ως πρότυπο για το περιεχόμενο που ο δημιουργός θα εισάγει στη συνέχεια, όχι ως αλλαγή με αντιστροφή σε κελιά που ήδη υπάρχουν στο έγγραφο.
Μορφοποίηση Κελιών και Γραμμών
Cell.CellFormat είναι ένα CellFormat αντικείμενο (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) με ClearFormatting() για επαναφορά του και SetPaddings() για ορισμό και των τεσσάρων περιθωρίων κελιού ταυτόχρονα. Row.RowFormat είναι ένα RowFormat αντικείμενο (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) με το δικό του ClearFormatting().
Μορφοποίηση σε όλο τον πίνακα και AutoFit
Table αποκαλύπτει μόνο του ιδιότητες διάταξης — Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, και μεταδεδομένα προσβασιμότητας μέσω Title και Description. Table.AutoFit(AutoFitBehavior) αλλάζει το μέγεθος του πίνακα και των κελιών του σύμφωνα με τη δοθείσα συμπεριφορά. SetBorder() ορίζει μία πλευρά του περιγράμματος και SetBorders() ορίζει κάθε περίγραμμα στο ίδιο στυλ γραμμής, πλάτος και χρώμα σε όλο τον πίνακα· ClearBorders() και ClearShading() επαναφέρουν αυτά. ConvertToHorizontallyMergedCells() μετατρέπει τα κελιά που είχαν ενωθεί με την αντιστοίχιση πλάτους σε κελιά που επισημαίνονται ρητά με HorizontalMerge.
Προτιμώμενα και Πλάτη Κελιών
PreferredWidth αντιπροσωπεύει ένα πλάτος και τη μονάδα του, δημιουργείται με τις στατικές μεθόδους κατασκευής PreferredWidth.FromPercent() ή PreferredWidth.FromPoints(); PreferredWidthType προσδιορίζει ποιο είδος τιμής (Auto, Percent, ή Points) περιέχει ένα δεδομένο PreferredWidth. Και οι δύο Table.PreferredWidth και CellFormat.PreferredWidth δέχονται αυτές τις τιμές.
Συγχωνευμένα Κελιά
CellFormat.HorizontalMerge και CellFormat.VerticalMerge (CellMerge) υποδεικνύουν πώς ένα κελί συμμετέχει σε οριζόντια ή κάθετη συγχώνευση με τα γειτονικά του. CellVerticalAlignment ελέγχει πώς το περιεχόμενο ευθυγραμμίζεται κατακόρυφα μέσα σε ένα κελί, ανεξάρτητα από οποιαδήποτε κατάσταση συγχώνευσης.
Συμβουλές και Καλές Πρακτικές
- Κλείστε κάθε
StartTable()με ένα αντίστοιχοEndRow()ανά γραμμή και ένα τελικόEndTable()— μια ανοιχτή γραμμή ή πίνακας αφήνει την εσωτερική κατάσταση του builder (και το προκύπτον δέντρο εγγράφων) κατεστραμμένη. - Ορίστε
DocumentBuilder.CellFormatκαιDocumentBuilder.RowFormatπριν από κάθε κλήσηInsertCell()ήEndRow()εάν διαφορετικές γραμμές ή κελιά στον ίδιο πίνακα χρειάζονται διαφορετική μορφοποίηση· ο builder εφαρμόζει ό,τι είναι αυτή τη στιγμή ορισμένο τη στιγμή της εισαγωγής. - Καλείτε
Table.EnsureMinimum(),Row.EnsureMinimum()ήCell.EnsureMinimum()μετά την αφαίρεση του περιεχομένου προγραμματιστικά, ώστε ο κόμβος να διατηρεί τη ελάχιστη έγκυρη δομή που αναμένεται από το Word. - Χρησιμοποιήστε
PreferredWidth.FromPercent()για πίνακες που πρέπει να προσαρμόζονται στο διαθέσιμο πλάτος σελίδας, καιPreferredWidth.FromPoints()για σταθερό πλάτος διάταξης. AutoFitBehaviorεφαρμόζεται όταν καλέσετεTable.AutoFit()— δεν εκτελείται συνεχώς καθώς προσθέτετε ή αφαιρείτε περιεχόμενο, έτσι καλέστε το ξανά μετά από σημαντικές αλλαγές αν χρειάζεστε την επαναρύθμιση του πίνακα.
Συνηθισμένα προβλήματα
| Ζήτημα | Αιτία | Διόρθωση |
|---|---|---|
| Ο πίνακας φαίνεται παραμορφωμένος ή προκαλεί σφάλμα όταν αποθηκεύεται | Μια γραμμή ή ο πίνακας δεν έκλεισε ποτέ με EndRow() / EndTable() | Πάντα ζευγαρώστε το StartTable() με ένα τελικό EndTable() και κλείστε κάθε γραμμή με το EndRow() |
| Τα νέα κελιά δεν υιοθετούν τη μορφοποίηση που έθεσα | CellFormat / RowFormat άλλαξαν στον δημιουργό μετά την εισαγωγή των κελιών | Ορίστε το DocumentBuilder.CellFormat / RowFormat πριν καλέσετε το InsertCell() / EndRow() για αυτό το περιεχόμενο |
| Ο πίνακας δεν αλλάζει μέγεθος όπως αναμένω μετά τις επεξεργασίες | AutoFit() αντικατοπτρίζει την κατάσταση του πίνακα τη στιγμή που κληθεί, όχι συνεχώς | Καλέστε ξανά το Table.AutoFit(AutoFitBehavior) μετά από δομικές επεξεργασίες |
| Δίπλα-δίπλα κελιά που φαίνονται συγχωνευμένα λειτουργούν ως ξεχωριστά κελιά | Τα κελιά ταιριάχτηκαν μόνο με το πλάτος, χωρίς να σημειώνονται με CellMerge | Καλέστε το Table.ConvertToHorizontallyMergedCells(), ή ορίστε ρητά τα CellFormat.HorizontalMerge / VerticalMerge |
FAQ
Πώς μπορώ να δημιουργήσω έναν πίνακα από την αρχή με DocumentBuilder;
Καλέστε StartTable(), έπειτα InsertCell() για κάθε κελί σε μια σειρά, EndRow() για να κλείσετε τη σειρά, επαναλάβετε για πρόσθετες σειρές, και τέλος EndTable() για να κλείσετε τον πίνακα.
Πώς μπορώ να ορίσω το πλάτος του πίνακα με ποσοστό αντί για σταθερό πλάτος;
Αναθέστε Table.PreferredWidth = PreferredWidth.FromPercent(value) αντί για PreferredWidth.FromPoints(value).
Πώς μπορώ να επαναφέρω όλη τη μορφοποίηση σε ένα κελί ή μια σειρά;
Καλέστε CellFormat.ClearFormatting() στο CellFormat ενός κελιού, ή RowFormat.ClearFormatting() στο RowFormat μιας σειράς.
Πώς μπορώ να ορίσω τα περιθώρια και τη σκίαση για ολόκληρο τον πίνακα ταυτόχρονα;
Χρησιμοποιήστε Table.SetBorders() για ομοιόμορφο περιθώριο σε κάθε πλευρά, Table.SetBorder() για μία πλευρά τη φορά, και Table.SetShading() για ομοιόμορφη σκίαση· ClearBorders() και ClearShading() τα επαναφέρουν.
API Reference Περίληψη
| Κλάση / Enum | Περιγραφή |
|---|---|
Table | Κόμβος πίνακα; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Κόμβος γραμμής πίνακα; Cells, RowFormat, EnsureMinimum() |
Cell | Κόμβος κελιού πίνακα; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Τυποποιημένες συλλογές των Table / Row / Cell κόμβων |
CellFormat | Διαμόρφωση ανά κελί: περιγράμματα, σκίαση, εσωτερική απόσταση, κατάσταση συγχώνευσης, κατακόρυφη στοίχιση |
RowFormat | Διαμόρφωση ανά σειρά: περιγράμματα, ύψος, συμπεριφορά αλλαγής σελίδας |
PreferredWidth / PreferredWidthType | Τιμή πλάτους πίνακα ή κελιού και η μονάδα του (auto, percent, points) |
AutoFitBehavior | Πώς το Table.AutoFit() αλλάζει το μέγεθος ενός πίνακα και των κελιών του |
CellMerge / CellVerticalAlignment | Κατάσταση οριζόντιας/κατακόρυφης συγχώνευσης κελιών και κατακόρυφη στοίχιση περιεχομένου |
TableAlignment / TableStyleOptions / TextWrapping | Στοίχιση σε όλο τον πίνακα, εφαρμογή στυλ και συμπεριφορά αναδίπλωσης κειμένου |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Δημιουργία πίνακα με βάση τον κέρσορα |