Hur hur man arbetar med tabeller i .NET
Den här guiden visar hur man bygger, formaterar och läser tabeller programatiskt i Aspose.Words FOSS för .NET, med Table, Row, och Cell klasser i Aspose.Words.Tables namnrymd tillsammans med DocumentBuilder. Det täcker att konstruera en tabell från grunden, formatera celler och rader medan du bygger, styra tabellomfattande layout och AutoFit, ange föredragna bredder, slå ihop celler och läsa tabeller som redan finns i ett laddat dokument.
Steg-för-steg guide
Steg 1: Installera paketet
Aspose.Words FOSS för .NET publicerar ännu inte ett NuGet-paket – bygg biblioteket från källkod istället. Klona https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bygg sedan Aspose.Words.sln i Release-konfiguration med .NET SDK och referera den resulterande Aspose.Words-samlingen i ditt projekt. Biblioteket riktar sig mot .NET Standard 2.0, så det körs på .NET Framework 4.6.2+ och .NET 6/8/10.
Steg 2: Importera nödvändiga klasser
Lägg till en using Aspose.Words;-direktiv för kärndokumentklasserna (Document, DocumentBuilder) och ett using Aspose.Words.Tables;-direktiv för de tabellspecifika klasser som den här guiden täcker – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth och relaterade uppräkningar.
Steg 3: Bygg en ny tabell med DocumentBuilder
Skapa en Document och en DocumentBuilder som är bunden till den, anropa sedan DocumentBuilder.StartTable() för att påbörja en tabell vid markören. För varje cell i en rad, anropa DocumentBuilder.InsertCell(), och avsluta sedan raden med DocumentBuilder.EndRow(). Upprepa för så många rader som tabellen kräver, och stäng hela tabellen med DocumentBuilder.EndTable(). Varje StartTable() kräver en matchande EndTable(), och varje rad kräver en matchande EndRow(), annars blir byggarens interna tillstånd – och det resulterande dokumentträdet – felaktigt.
Steg 4: Formatera celler och rader medan du bygger
Ställ in DocumentBuilder.CellFormat och DocumentBuilder.RowFormat innan du anropar InsertCell() eller EndRow() för att tillämpa formatering på de celler och rader som byggaren håller på att skapa – dessa två egenskaper fungerar som en mall för nytt innehåll, inte som en retroaktiv förändring av redan infogade celler. CellFormat exponerar Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth och de fyra utfyllnads-egenskaperna (LeftPadding, RightPadding, TopPadding, BottomPadding), som alla kan sättas på en gång med SetPaddings(). RowFormat exponerar Borders, Height, HeightRule, AllowBreakAcrossPages och HeadingFormat. Anropa CellFormat.ClearFormatting() eller RowFormat.ClearFormatting() för att återställa någon av dem till standardvärden innan du sätter nya värden för nästa rad eller cell.
Steg 5: Ställ in tabellomfattande layout och AutoFit
När tabellen finns, sätt layout-egenskaper direkt på Table-objektet: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) och TextWrapping. Anropa Table.SetBorders() för att applicera en kantlinjestil, bredd och färg på hela tabellen, eller Table.SetBorder() för att sätta en enskild sida; ClearBorders() och ClearShading() återställer dem. Table.AutoFit(AutoFitBehavior) ändrar storlek på tabellen och dess celler enligt det valda beteendet – anropa den igen efter någon strukturell ändring, eftersom den bara speglar tabellens tillstånd vid det ögonblick den körs, inte kontinuerligt.
Steg 6: Ställ in föredragna och cellbredder
Skapa breddvärden med de statiska fabriksmetoderna PreferredWidth.FromPercent() för en layout som anpassar sig till den tillgängliga sidbredden, eller PreferredWidth.FromPoints() för en fast bredd; PreferredWidthType rapporterar vilken typ av värde (Auto, Percent eller Points) ett givet PreferredWidth innehåller. Tilldela resultatet till antingen Table.PreferredWidth för hela tabellen eller CellFormat.PreferredWidth för en enskild cell.
Steg 7: Slå ihop celler
Markera celler som sammanslagna genom att sätta CellFormat.HorizontalMerge eller CellFormat.VerticalMerge (båda skrivna CellMerge) på de celler som ska delta i sammanslagningen. Om celler bara fick se ut som sammanslagna genom att matcha deras bredd snarare än att explicit flaggas, anropa Table.ConvertToHorizontallyMergedCells() för att omvandla det visuella arrangemanget till celler med riktigt CellMerge tillstånd. CellVerticalAlignment styr hur innehåll justeras vertikalt inom en cell, oberoende av någon sammanslagning.
Steg 8: Läs tabeller från ett befintligt dokument
För att arbeta med tabeller som redan finns i ett inläst dokument, läs Body.Tables (eller Tables-egenskapen på någon annan Story) – en TableCollection – istället för att bygga nya. Table.Rows returnerar en RowCollection och Row.Cells returnerar en CellCollection; alla tre samlingstyper stödjer Add(), Insert(), Remove(), RemoveAt(), Contains() och IndexOf() för programatiska redigeringar. Efter att ha tagit bort rader eller celler, anropa Table.EnsureMinimum(), Row.EnsureMinimum() eller Cell.EnsureMinimum() så att noden behåller den minsta giltiga strukturen som Word förväntar sig – en tom rad, en tom cell eller ett tomt stycke, respektive.
Vanliga problem och lösningar
Ett sparat dokument ser felaktigt ut, eller så uppstår ett fel vid sparande En rad eller själva tabellen stängdes aldrig. Para alltid DocumentBuilder.StartTable() med ett slutligt EndTable(), och stäng varje rad med EndRow() innan du går vidare till nästa eller avslutar tabellen.
Nya celler tar inte upp formateringen jag satte CellFormat and RowFormat ändrades på DocumentBuilder efter de påverkade cellerna redan hade infogats. Ställ DocumentBuilder.CellFormat / RowFormat före InsertCell() or EndRow() anropet som skapar innehållet du vill ha formaterat.
Tabellen ändrar inte storlek på det sätt jag förväntar mig efter att jag har redigerat dess innehåll. Table.AutoFit(AutoFitBehavior) återspeglar bara tabellens struktur vid det tillfälle den anropas. Anropa den igen efter någon strukturell ändring – att lägga till eller ta bort rader, celler eller innehåll – om layouten måste anpassas på nytt.
Celler som ser sammanslagna ut beter sig som separata celler när de läses tillbaka. Cellerna matchades bara efter bredd, inte flaggade med CellMerge. Anropa Table.ConvertToHorizontallyMergedCells(), eller sätt CellFormat.HorizontalMerge / VerticalMerge explicit på de celler som ska slås ihop.
Att ta bort rader eller celler lämnar tabellen i ett ogiltigt tillstånd Word förväntar sig varje Table, Row, och Cell för att behålla en minsta giltig struktur. Efter att ha tagit bort innehåll programatiskt, anropa EnsureMinimum() på den nyligen modifierade noden.
Vanliga frågor
Hur bygger jag en tabell från grunden istället för att redigera en befintlig?
Använd DocumentBuilder: anropa StartTable(), sedan InsertCell() för varje cell i en rad, EndRow() för att avsluta raden, upprepa för ytterligare rader, och EndTable() för att avsluta tabellen.
Hur får jag tabellerna som redan finns i ett inläst dokument?
Läs egenskapen Tables (en TableCollection) på Body i den sektion du är intresserad av, eller på någon annan Story såsom en sidhuvud eller sidfot.
Hur ställer jag in en tabell till en procentandel av sidans bredd istället för en fast bredd?
Tilldela Table.PreferredWidth = PreferredWidth.FromPercent(value) istället för PreferredWidth.FromPoints(value).
Vad är skillnaden mellan att sätta kanter med SetBorders och SetBorder?
Table.SetBorders() tillämpar en linjestil, bredd och färg på varje kant i tabellen samtidigt; Table.SetBorder() anger en enskild sida, så att olika sidor kan ha olika formatering.
Hur återställer jag formatering på en cell eller rad innan jag återanvänder den?
Anropa CellFormat.ClearFormatting() på cellens CellFormat, eller RowFormat.ClearFormatting() på radens RowFormat.