Hoe te werken met tabellen in .NET
Deze gids laat zien hoe je tabellen programmatisch kunt bouwen, opmaken en lezen in Aspose.Words FOSS voor .NET, met behulp van de Table, Row, en Cell klassen in de Aspose.Words.Tables namespace samen met DocumentBuilder. Het behandelt het construeren van een tabel vanaf nul, het opmaken van cellen en rijen tijdens het bouwen, het beheren van de lay-out van de hele tabel en AutoFit, het instellen van voorkeursbreedtes, het samenvoegen van cellen, en het lezen van tabellen die al aanwezig zijn in een geladen document.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
Aspose.Words FOSS voor .NET publiceert nog geen NuGet pakket – bouw de bibliotheek in plaats daarvan vanuit de bron. Clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bouw vervolgens Aspose.Words.sln in Release-configuratie met de .NET SDK en verwijs naar de resulterende Aspose.Words assembly vanuit je project. De bibliotheek richt zich op .NET Standard 2.0, dus draait hij op .NET Framework 4.6.2+ en .NET 6/8/10.
Stap 2: Importeer vereiste klassen
Voeg een using Aspose.Words; directive toe voor de kern documentklassen (Document, DocumentBuilder), en een using Aspose.Words.Tables; directive voor de tabel-specifieke klassen die deze gids behandelt – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth, en gerelateerde enums.
Stap 3: Bouw een nieuwe tabel met DocumentBuilder
Maak een Document en een DocumentBuilder eraan gekoppeld, roep vervolgens DocumentBuilder.StartTable() aan om een tabel te beginnen op de cursor. Voor elke cel in een rij roep je DocumentBuilder.InsertCell() aan, sluit vervolgens de rij af met DocumentBuilder.EndRow(). Herhaal dit voor zoveel rijen als de tabel nodig heeft, en sluit de hele tabel af met DocumentBuilder.EndTable(). Elke StartTable() heeft een bijpassende EndTable() nodig, en elke rij heeft een bijpassende EndRow(), anders raakt de interne staat van de builder – en de resulterende documentboom – misvormd.
Stap 4: Formatteer cellen en rijen terwijl je bouwt
Stel DocumentBuilder.CellFormat en DocumentBuilder.RowFormat in vóór het aanroepen van InsertCell() of EndRow() om opmaak toe te passen op de cellen en rijen die de builder gaat maken – deze twee eigenschappen fungeren als een sjabloon voor nieuwe inhoud, niet als een retroactieve wijziging van al ingevoegde cellen. CellFormat maakt Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth en de vier opvul-eigenschappen (LeftPadding, RightPadding, TopPadding, BottomPadding) beschikbaar, die allemaal tegelijk kunnen worden ingesteld met SetPaddings(). RowFormat maakt Borders, Height, HeightRule, AllowBreakAcrossPages en HeadingFormat beschikbaar. Roep CellFormat.ClearFormatting() of RowFormat.ClearFormatting() aan om een van beiden te resetten naar de standaardwaarden voordat je nieuwe waarden instelt voor de volgende rij of cel.
Stap 5: Stel tabelbrede lay-out en AutoFit in
Zodra de tabel bestaat, stel je lay-out-eigenschappen rechtstreeks in op het Table-object: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) en TextWrapping. Roep Table.SetBorders() aan om één randstijl, breedte en kleur toe te passen op de hele tabel, of Table.SetBorder() om één zijde in te stellen; ClearBorders() en ClearShading() resetten deze. Table.AutoFit(AutoFitBehavior) verandert de grootte van de tabel en zijn cellen volgens het gekozen gedrag – roep het opnieuw aan na elke structurele wijziging, omdat het alleen de staat van de tabel op het moment van uitvoering weergeeft, niet continu.
Stap 6: Stel voorkeurs- en celbreedtes in
Maak breedte-waarden aan met de statische fabrieksmethoden PreferredWidth.FromPercent() voor een lay-out die zich aanpast aan de beschikbare paginabreedte, of PreferredWidth.FromPoints() voor een vaste breedte; PreferredWidthType meldt welk type waarde (Auto, Percent of Points) een gegeven PreferredWidth bevat. Wijs het resultaat toe aan Table.PreferredWidth voor de hele tabel of aan CellFormat.PreferredWidth voor één cel.
Stap 7: Cellen samenvoegen
Markeer cellen als samengevoegd door CellFormat.HorizontalMerge of CellFormat.VerticalMerge in te stellen (beide getypt als CellMerge) op de cellen die aan de samenvoeging moeten deelnemen. Als cellen alleen visueel samengevoegd leken door hun breedtes op elkaar af te stemmen in plaats van expliciet gemarkeerd te zijn, roep Table.ConvertToHorizontallyMergedCells() aan om die visuele opstelling om te zetten in cellen met een echte CellMerge status. CellVerticalAlignment bepaalt hoe inhoud verticaal wordt uitgelijnd binnen een cel, onafhankelijk van enige samenvoeging.
Stap 8: Tabellen lezen uit een bestaand document
Om te werken met tabellen die al in een geladen document aanwezig zijn, lees Body.Tables (of de Tables eigenschap op een andere Story) — een TableCollection — in plaats van nieuwe te bouwen. Table.Rows geeft een RowCollection terug en Row.Cells geeft een CellCollection terug; alle drie de collectietypen ondersteunen Add(), Insert(), Remove(), RemoveAt(), Contains() en IndexOf() voor programmatologische bewerkingen. Na het verwijderen van rijen of cellen, roep Table.EnsureMinimum(), Row.EnsureMinimum() of Cell.EnsureMinimum() aan zodat het knooppunt de minimale geldige structuur behoudt die Word verwacht — respectievelijk een lege rij, een lege cel, of een lege alinea.
Veelvoorkomende problemen en oplossingen
Een opgeslagen document ziet er misvormd uit, of er treedt een fout op tijdens het opslaan Een rij of de tabel zelf werd nooit gesloten. Koppel altijd DocumentBuilder.StartTable() met een finale EndTable(), en sluit elke rij met EndRow() voordat je naar de volgende gaat of de tabel beëindigt.
Nieuwe cellen nemen de opmaak die ik heb ingesteld niet over CellFormat and RowFormat werden gewijzigd op de DocumentBuilder nadat de betrokken cellen al waren ingevoegd. Stel DocumentBuilder.CellFormat / RowFormat vóór de InsertCell() or EndRow() aanroep die de inhoud maakt die je wilt formatteren.
Tabel wordt niet aangepast op de manier die ik verwacht nadat ik de inhoud heb bewerkt Table.AutoFit(AutoFitBehavior) geeft alleen de structuur van de tabel weer op het moment dat het wordt aangeroepen. Roep het opnieuw aan na een structurele wijziging — het toevoegen of verwijderen van rijen, cellen, of inhoud — als de lay-out opnieuw moet worden aangepast.
Cellen die samengevoegd lijken te zijn, gedragen zich als afzonderlijke cellen bij het teruglezen De cellen werden alleen op breedte gematcht, niet gemarkeerd met CellMerge. Roep aan Table.ConvertToHorizontallyMergedCells(), of stel CellFormat.HorizontalMerge / VerticalMerge expliciet op de cellen die moeten worden samengevoegd.
Het verwijderen van rijen of cellen brengt de tabel in een ongeldige staat Word verwacht elke Table, Row, en Cell om een minimale geldige structuur te behouden. Na het programmatisch verwijderen van inhoud, roep EnsureMinimum() aan de zojuist gewijzigde knoop.
Veelgestelde vragen
Hoe bouw ik een tabel vanaf nul in plaats van een bestaande te bewerken?
Gebruik DocumentBuilder: roep StartTable() aan, vervolgens InsertCell() voor elke cel in een rij, EndRow() om de rij te sluiten, herhaal voor extra rijen, en EndTable() om de tabel te sluiten.
Hoe krijg ik de tabellen die al bestaan in een geladen document?
Lees de Tables eigenschap (een TableCollection) op de Body van de sectie waarin je geïnteresseerd bent, of op een andere Story zoals een koptekst of voettekst.
Hoe stel ik een tabel in op een percentage van de paginabreedte in plaats van een vaste breedte?
Ken Table.PreferredWidth = PreferredWidth.FromPercent(value) toe in plaats van PreferredWidth.FromPoints(value).
Wat is het verschil tussen het instellen van randen met SetBorders en SetBorder?
Table.SetBorders() past één lijnstijl, breedte en kleur toe op elke rand in de tabel tegelijk; Table.SetBorder() stelt een enkele zijde in, waardoor verschillende zijden verschillende opmaak kunnen hebben.
Hoe reset ik de opmaak van een cel of rij voordat ik deze opnieuw gebruik?
Roep CellFormat.ClearFormatting() aan op de CellFormat van de cel, of RowFormat.ClearFormatting() op de RowFormat van de rij.