Werken met tabellen
Werken met tabellen
Tabellen in Aspose.Words FOSS voor .NET worden weergegeven door de Aspose.Words.Tables namespace: Table, Row, en Cell vormen een drie-niveau samengestelde knooppuntenhiërarchie die zich in de documentboom bevindt naast alinea’s. Deze pagina behandelt het bouwen van tabellen met DocumentBuilder, het opmaken van rijen en cellen, het regelen van de lay-out van de hele tabel en het samenvoegen van cellen.
Het Table Object Model
Een Table is een CompositeNode die Row knooppunten bevat, en elke Row is een CompositeNode die Cell knooppunten bevat; een Cell bevat op zijn beurt alinea’s en eventueel geneste tabellen. Table.Rows retourneert een RowCollection, Row.Cells retourneert een CellCollection, en een Body of andere Story maakt elke bovenliggende tabel erin bloot via zijn Tables eigenschap, een TableCollection. Alle drie collecties ondersteunen Add(), Insert(), Remove(), RemoveAt(), Contains() en IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() en Cell.EnsureMinimum() vullen elk de kleinste geldige inhoud in die een knoop van dat type nodig heeft (respectievelijk een lege rij, een lege cel of een lege alinea) nadat programmatische bewerkingen er een zonder hebben achtergelaten.
Tabellen bouwen met DocumentBuilder
DocumentBuilder.StartTable() begint een nieuwe tabel op de cursor, InsertCell() voegt een cel toe aan de huidige rij, EndRow() sluit de huidige rij, en EndTable() sluit de tabel. Stel DocumentBuilder.CellFormat en DocumentBuilder.RowFormat in voordat je InsertCell() of EndRow() aanroept om standaardopmaak toe te passen op cellen en rijen terwijl ze worden aangemaakt — deze eigenschappen fungeren als een sjabloon voor de inhoud die de bouwer vervolgens invoegt, niet als een retroactieve wijziging van reeds bestaande cellen in het document.
Cel- en rijopmaak
Cell.CellFormat is een CellFormat instantie (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) met ClearFormatting() om het te resetten en SetPaddings() om alle vier celpaddings tegelijk in te stellen. Row.RowFormat is een RowFormat instantie (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) met zijn eigen ClearFormatting().
Tabelbrede opmaak en AutoFit
Table zelf exposeert layout-eigenschappen – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, en toegankelijkheidsmetadata via Title en Description. Table.AutoFit(AutoFitBehavior) past de grootte van de tabel en haar cellen aan volgens het opgegeven gedrag. SetBorder() stelt één randzijde in en SetBorders() stelt elke rand in op dezelfde lijnstijl, breedte en kleur over de hele tabel; ClearBorders() en ClearShading() resetten die. ConvertToHorizontallyMergedCells() converteert cellen die door overeenkomende breedte waren samengevoegd naar cellen die expliciet gemarkeerd zijn met HorizontalMerge.
Voorkeurs- en celbreedtes
PreferredWidth vertegenwoordigt een breedte en de eenheid ervan, gecreëerd met de statische fabrieksmethoden PreferredWidth.FromPercent() of PreferredWidth.FromPoints(); PreferredWidthType identificeert welk type waarde (Auto, Percent of Points) een gegeven PreferredWidth bevat. Zowel Table.PreferredWidth als CellFormat.PreferredWidth accepteren deze waarden.
Samengevoegde cellen
CellFormat.HorizontalMerge en CellFormat.VerticalMerge (CellMerge) geven aan hoe een cel deelneemt aan een horizontale of verticale samenvoeging met zijn buren. CellVerticalAlignment bepaalt hoe de inhoud verticaal wordt uitgelijnd binnen een cel, onafhankelijk van enige samenvoegingsstatus.
Tips en best practices
- Sluit elke
StartTable()af met een bijpassendeEndRow()per rij en een uiteindelijkeEndTable()– een niet-gesloten rij of tabel laat de interne staat van de builder (en de resulterende documentboom) misvormd achter. - Stel
DocumentBuilder.CellFormatenDocumentBuilder.RowFormatin vóór elkeInsertCell()ofEndRow()aanroep als verschillende rijen of cellen in dezelfde tabel verschillende opmaak nodig hebben; de builder past toe wat op dat moment is ingesteld bij het invoegen. - Roep
Table.EnsureMinimum(),Row.EnsureMinimum()ofCell.EnsureMinimum()aan nadat je inhoud programmatisch hebt verwijderd zodat het knooppunt de minimale geldige structuur behoudt die Word verwacht. - Gebruik
PreferredWidth.FromPercent()voor tabellen die zich moeten aanpassen aan de beschikbare paginabreedte, enPreferredWidth.FromPoints()voor een vaste lay-outbreedte. AutoFitBehaviorwordt toegepast wanneer jeTable.AutoFit()aanroept – het wordt niet continu opnieuw uitgevoerd terwijl je inhoud toevoegt of verwijdert, dus roep het opnieuw aan na ingrijpende bewerkingen als je de tabel opnieuw moet aanpassen.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| Tabel ziet er misvormd uit of geeft een fout bij opslaan | Een rij of de tabel is nooit gesloten met EndRow() / EndTable() | Koppel altijd StartTable() met een eindige EndTable(), en sluit elke rij af met EndRow() |
| Nieuwe cellen nemen de door mij ingestelde opmaak niet over | CellFormat / RowFormat zijn gewijzigd in de builder nadat de cellen al waren ingevoegd | Stel DocumentBuilder.CellFormat / RowFormat in voordat je InsertCell() / EndRow() aanroept voor die inhoud |
| Tabel past zich niet aan zoals ik verwacht na bewerkingen | AutoFit() geeft de staat van de tabel weer op het moment dat het wordt aangeroepen, niet continu | Roep Table.AutoFit(AutoFitBehavior) opnieuw aan na structurele bewerkingen |
| Aangrenzende cellen die samengevoegd lijken te zijn, gedragen zich als afzonderlijke cellen | Cellen werden alleen op breedte afgestemd, niet gemarkeerd met CellMerge | Roep Table.ConvertToHorizontallyMergedCells() aan, of stel CellFormat.HorizontalMerge / VerticalMerge expliciet in |
FAQ
Hoe bouw ik een tabel vanaf nul met DocumentBuilder?
Roep StartTable() aan, vervolgens InsertCell() voor elke cel in een rij, EndRow() om de rij te sluiten, herhaal voor extra rijen, en tenslotte EndTable() om de tabel te sluiten.
Hoe stel ik een percentage-gebaseerde tabelbreedte in plaats van een vaste breedte?
Wijs Table.PreferredWidth = PreferredWidth.FromPercent(value) toe in plaats van PreferredWidth.FromPoints(value).
Hoe reset ik alle opmaak van een cel of rij?
Roep CellFormat.ClearFormatting() aan op de CellFormat van een cel, of RowFormat.ClearFormatting() op de RowFormat van een rij.
Hoe stel ik randen en arcering in voor de hele tabel in één keer?
Gebruik Table.SetBorders() voor een uniforme rand aan alle kanten, Table.SetBorder() voor één kant tegelijk, en Table.SetShading() voor uniforme arcering; ClearBorders() en ClearShading() resetten ze.
API Reference Samenvatting
| Klasse / Enum | Beschrijving |
|---|---|
Table | Tabelknooppunt; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Tabelrijknooppunt; Cells, RowFormat, EnsureMinimum() |
Cell | Tabelcelknooppunt; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Getypte collecties van Table / Row / Cell knooppunten |
CellFormat | Per-celopmaak: randen, schaduw, opvulling, samenvoegstatus, verticale uitlijning |
RowFormat | Per-rijopmaak: randen, hoogte, pagina-afbrekingsgedrag |
PreferredWidth / PreferredWidthType | Tabel- of celbreedtewaarde en de eenheid ervan (auto, procent, punten) |
AutoFitBehavior | Hoe Table.AutoFit() een tabel en de cellen schaalt |
CellMerge / CellVerticalAlignment | Horizontale/verticale cel-samenvoegingsstatus en verticale inhoudsuitlijning |
TableAlignment / TableStyleOptions / TextWrapping | Tabelbrede uitlijning, stijltoepassing en tekstomloopgedrag |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Cursor-gebaseerde tabelconstructie |