Arbeta med tabeller
Arbeta med tabeller
Tabeller i Aspose.Words FOSS för .NET är representerade av Aspose.Words.Tables namnutrymme: Table, Row, och Cell utgör en tre-nivåers sammansatt nodhierarki som sitter i dokumentträdet bredvid stycken. Den här sidan täcker att bygga tabeller med DocumentBuilder, formatera rader och celler, styra tabellomfattande layout och slå ihop celler.
Tabellens objektmodell
En Table är en CompositeNode som innehåller Row noder, och varje Row är en CompositeNode som innehåller Cell noder; en Cell i sin tur innehåller stycken och, eventuellt, inbäddade tabeller. Table.Rows returnerar en RowCollection, Row.Cells returnerar en CellCollection, och en Body eller annan Story exponerar varje top-level-tabell i den via dess Tables egenskap, en TableCollection. Alla tre samlingar stödjer Add(), Insert(), Remove(), RemoveAt(), Contains() och IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() och Cell.EnsureMinimum() fyller vardera i det minsta giltiga innehållet som en nod av den typen behöver (en tom rad, en tom cell eller ett tomt stycke, respektive) efter att programatiska ändringar lämnat en utan det.
Bygga tabeller med DocumentBuilder
DocumentBuilder.StartTable() startar en ny tabell vid markören, InsertCell() lägger till en cell i den aktuella raden, EndRow() avslutar den aktuella raden och EndTable() avslutar tabellen. Ställ in DocumentBuilder.CellFormat och DocumentBuilder.RowFormat innan du anropar InsertCell() eller EndRow() för att tillämpa standardformatering på celler och rader när de skapas — dessa egenskaper fungerar som en mall för innehållet som byggaren infogar härnäst, inte som en retroaktiv ändring av celler som redan finns i dokumentet.
Formatering av celler och rader
Cell.CellFormat är en CellFormat instans (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) med ClearFormatting() för att återställa den och SetPaddings() för att sätta alla fyra cellutfyllnader på en gång. Row.RowFormat är en RowFormat instans (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) med sin egen ClearFormatting().
Tabellomfattande formatering och AutoFit
Table själv exponerar layout-egenskaper – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, och tillgänglighetsmetadata via Title och Description. Table.AutoFit(AutoFitBehavior) ändrar storlek på tabellen och dess celler enligt det angivna beteendet. SetBorder() sätter en kant på en sida och SetBorders() sätter alla kanter till samma linjestil, bredd och färg i hela tabellen; ClearBorders() och ClearShading() återställer dem. ConvertToHorizontallyMergedCells() konverterar celler som sammanfogades genom matchande bredd till celler som explicit flaggas med HorizontalMerge.
Föredragna och cellbredder
PreferredWidth representerar en bredd och dess enhet, skapad med de statiska fabrikmetoderna PreferredWidth.FromPercent() eller PreferredWidth.FromPoints(); PreferredWidthType identifierar vilken typ av värde (Auto, Percent eller Points) ett givet PreferredWidth innehåller. Både Table.PreferredWidth och CellFormat.PreferredWidth accepterar dessa värden.
Sammanfogade celler
CellFormat.HorizontalMerge och CellFormat.VerticalMerge (CellMerge) markerar hur en cell deltar i en horisontell eller vertikal sammanslagning med sina grannar. CellVerticalAlignment styr hur innehållet justeras vertikalt inom en cell, oberoende av eventuell sammanslagningsstatus.
Tips och bästa praxis
- Stäng varje
StartTable()med en matchandeEndRow()per rad och ett sistaEndTable()– en oavslutad rad eller tabell lämnar byggarens interna tillstånd (och det resulterande dokumentträdet) felaktigt. - Ange
DocumentBuilder.CellFormatochDocumentBuilder.RowFormatföre varjeInsertCell()- ellerEndRow()-anrop om olika rader eller celler i samma tabell kräver olika formatering; byggaren tillämpar det som för tillfället är inställt vid insättningen. - Anropa
Table.EnsureMinimum(),Row.EnsureMinimum()ellerCell.EnsureMinimum()efter att ha tagit bort innehåll programatiskt så att noden behåller den minsta giltiga strukturen som Word förväntar sig. - Använd
PreferredWidth.FromPercent()för tabeller som ska anpassas till den tillgängliga sidbredden, ochPreferredWidth.FromPoints()för en fast layoutbredd. AutoFitBehaviortillämpas när du anroparTable.AutoFit()– den körs inte kontinuerligt när du lägger till eller tar bort innehåll, så anropa den igen efter betydande ändringar om du behöver att tabellen anpassas på nytt.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
| Tabellen ser felaktig ut eller ger fel när den sparas | En rad eller tabellen stängdes aldrig med EndRow() / EndTable() | Para alltid StartTable() med ett avslutande EndTable() och avsluta varje rad med EndRow() |
| Nya celler tar inte upp den formatering jag angav | CellFormat / RowFormat ändrades i byggaren efter att cellerna redan hade satts in | Ställ in DocumentBuilder.CellFormat / RowFormat innan du anropar InsertCell() / EndRow() för det innehållet |
| Tabellen ändrar inte storlek på det sätt jag förväntar mig efter redigeringar | AutoFit() speglar tabellens tillstånd i det ögonblick den anropas, inte kontinuerligt | Anropa Table.AutoFit(AutoFitBehavior) igen efter strukturella ändringar |
| Intilliggande celler som ser sammanslagna ut beter sig som separata celler | Cellerna matchades bara efter bredd, inte flaggades med CellMerge | Anropa Table.ConvertToHorizontallyMergedCells(), eller ange CellFormat.HorizontalMerge / VerticalMerge explicit |
FAQ
Hur bygger jag en tabell från början med DocumentBuilder?
Anropa StartTable(), sedan InsertCell() för varje cell i en rad, EndRow() för att avsluta raden, upprepa för ytterligare rader, och slutligen EndTable() för att avsluta tabellen.
Hur ställer jag in en procentbaserad tabellbredd istället för en fast bredd?
Tilldela Table.PreferredWidth = PreferredWidth.FromPercent(value) istället för PreferredWidth.FromPoints(value).
Hur återställer jag all formatering på en cell eller rad?
Anropa CellFormat.ClearFormatting() på en cells CellFormat, eller RowFormat.ClearFormatting() på en rads RowFormat.
Hur ställer jag in kanter och skuggning för hela tabellen på en gång?
Använd Table.SetBorders() för en enhetlig kant på alla sidor, Table.SetBorder() för en sida åt gången, och Table.SetShading() för enhetlig skuggning; ClearBorders() och ClearShading() återställer dem.
API Reference Sammanfattning
| Klass / Enum | Beskrivning |
|---|---|
Table | Tabellnod; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Tabellradnod; Cells, RowFormat, EnsureMinimum() |
Cell | Tabellcellnod; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Typade samlingar av Table / Row / Cell noder |
CellFormat | Formatering per cell: kanter, skuggning, utfyllnad, sammanslagningsstatus, vertikal justering |
RowFormat | Formatering per rad: kanter, höjd, sidbrytningsbeteende |
PreferredWidth / PreferredWidthType | Tabell- eller cellbredds värde och dess enhet (auto, procent, punkter) |
AutoFitBehavior | Hur Table.AutoFit() ändrar storlek på en tabell och dess celler |
CellMerge / CellVerticalAlignment | Horisontell/vertikal cellsammanfogningsstatus och vertikal innehållsjustering |
TableAlignment / TableStyleOptions / TextWrapping | Tabellomfattande justering, stiltillämpning och textbrytningsbeteende |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Markörbaserad tabellkonstruktion |