Jak pracować z tabelami w .NET
Ten przewodnik pokazuje, jak programowo tworzyć, formatować i odczytywać tabele w Aspose.Words FOSS dla .NET, używając Table, Row, oraz Cell klasy w Aspose.Words.Tables przestrzeni nazw wraz z DocumentBuilder. Obejmuje tworzenie tabeli od podstaw, formatowanie komórek i wierszy w trakcie budowy, kontrolowanie układu całej tabeli oraz AutoFit, ustawianie preferowanych szerokości, scalanie komórek oraz odczytywanie tabel już istniejących w załadowanym dokumencie.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Aspose.Words FOSS dla .NET nie publikuje jeszcze pakietu NuGet – zamiast tego zbuduj bibliotekę ze źródeł. Sklonuj https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, a następnie zbuduj Aspose.Words.sln w konfiguracji Release przy użyciu SDK .NET i odwołaj się do powstałego zestawu Aspose.Words w swoim projekcie. Biblioteka celuje w .NET Standard 2.0, więc działa na .NET Framework 4.6.2+ oraz .NET 6/8/10.
Krok 2: Zaimportuj wymagane klasy
Dodaj dyrektywę using Aspose.Words; dla podstawowych klas dokumentu (Document, DocumentBuilder) oraz dyrektywę using Aspose.Words.Tables; dla klas specyficznych dla tabel, które omawia ten przewodnik – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth oraz powiązane wyliczenia.
Krok 3: Utwórz nową tabelę przy użyciu DocumentBuilder
Utwórz Document i DocumentBuilder powiązany z nim, a następnie wywołaj DocumentBuilder.StartTable(), aby rozpocząć tabelę w miejscu kursora. Dla każdej komórki w wierszu wywołaj DocumentBuilder.InsertCell(), a następnie zamknij wiersz przy pomocy DocumentBuilder.EndRow(). Powtarzaj tyle wierszy, ile potrzebuje tabela, i zamknij całą tabelę przy użyciu DocumentBuilder.EndTable(). Każdy StartTable() wymaga pasującego EndTable(), a każdy wiersz wymaga pasującego EndRow(), w przeciwnym razie wewnętrzny stan konstruktora — oraz powstałe drzewo dokumentu — stanie się niepoprawne.
Krok 4: Formatuj komórki i wiersze podczas budowania
Ustaw DocumentBuilder.CellFormat i DocumentBuilder.RowFormat przed wywołaniem InsertCell() lub EndRow(), aby zastosować formatowanie do komórek i wierszy, które konstruktor ma utworzyć — te dwie właściwości działają jako szablon dla nowej treści, a nie jako retrospektywna zmiana już wstawionych komórek. CellFormat udostępnia Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth oraz cztery właściwości wypełnienia (LeftPadding, RightPadding, TopPadding, BottomPadding), które wszystkie można ustawić jednocześnie przy użyciu SetPaddings(). RowFormat udostępnia Borders, Height, HeightRule, AllowBreakAcrossPages i HeadingFormat. Wywołaj CellFormat.ClearFormatting() lub RowFormat.ClearFormatting(), aby zresetować jedną z nich do wartości domyślnych przed ustawieniem nowych wartości dla kolejnego wiersza lub komórki.
Krok 5: Ustaw układ tabeli oraz AutoFit
Gdy tabela istnieje, ustaw właściwości układu bezpośrednio na obiekcie Table: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) oraz TextWrapping. Wywołaj Table.SetBorders(), aby zastosować jeden styl obramowania, szerokość i kolor dla całej tabeli, lub Table.SetBorder(), aby ustawić pojedynczą krawędź; ClearBorders() i ClearShading() resetują je. Table.AutoFit(AutoFitBehavior) zmienia rozmiar tabeli i jej komórek zgodnie z wybranym zachowaniem — wywołaj go ponownie po każdej modyfikacji strukturalnej, ponieważ odzwierciedla on stan tabeli tylko w momencie uruchomienia, a nie ciągle.
Krok 6: Ustaw preferowane szerokości i szerokości komórek
Utwórz wartości szerokości za pomocą statycznych metod fabrycznych PreferredWidth.FromPercent() dla układu dostosowującego się do dostępnej szerokości strony lub PreferredWidth.FromPoints() dla stałej szerokości; PreferredWidthType informuje, jaki rodzaj wartości (Auto, Percent lub Points) posiada dany PreferredWidth. Przypisz wynik do Table.PreferredWidth dla całej tabeli lub CellFormat.PreferredWidth dla jednej komórki.
Krok 7: Scal komórki
Oznacz komórki jako scalone, ustawiając CellFormat.HorizontalMerge lub CellFormat.VerticalMerge (oba wpisane jako CellMerge) na komórkach, które mają uczestniczyć w scaleniu. Jeśli komórki wyglądały na scalone tylko dzięki dopasowaniu ich szerokości, a nie zostały wyraźnie oznaczone, wywołaj Table.ConvertToHorizontallyMergedCells(), aby przekształcić tę wizualną aranżację w komórki z rzeczywistym stanem CellMerge. CellVerticalAlignment kontroluje, jak zawartość jest wyrównana pionowo w komórce, niezależnie od jakiegokolwiek scalenia.
Krok 8: Odczyt tabel z istniejącego dokumentu
Aby pracować z tabelami już znajdującymi się w załadowanym dokumencie, odczytaj Body.Tables (lub właściwość Tables na dowolnym innym Story) — TableCollection — zamiast tworzyć nowe. Table.Rows zwraca RowCollection, a Row.Cells zwraca CellCollection; wszystkie trzy typy kolekcji obsługują Add(), Insert(), Remove(), RemoveAt(), Contains() i IndexOf() w celu programowych modyfikacji. Po usunięciu wierszy lub komórek wywołaj Table.EnsureMinimum(), Row.EnsureMinimum() lub Cell.EnsureMinimum(), aby węzeł zachował minimalną prawidłową strukturę wymaganą przez Word — pusty wiersz, pustą komórkę lub pusty akapit, odpowiednio.
Typowe problemy i rozwiązania
Zapisany dokument wygląda na uszkodzony, lub wystąpi błąd podczas zapisywania Wiersz lub sama tabela nigdy nie został zamknięty. Zawsze paruj DocumentBuilder.StartTable() z końcowym EndTable(), i zamknij każdy wiersz przy użyciu EndRow() przed przejściem do następnego lub zakończeniem tabeli.
Nowe komórki nie przejmują formatowania, które ustawiłem CellFormat and RowFormat zostały zmienione na DocumentBuilder po tym, jak dotknięte komórki zostały już wstawione. Ustaw DocumentBuilder.CellFormat / RowFormat przed InsertCell() or EndRow() wywołanie, które tworzy treść, którą chcesz sformatować.
Tabela nie zmienia rozmiaru w sposób, jakiego oczekuję po edycji jej zawartości Table.AutoFit(AutoFitBehavior) odzwierciedla strukturę tabeli tylko w momencie wywołania. Wywołaj ją ponownie po każdej zmianie strukturalnej — dodaniu lub usunięciu wierszy, komórek lub treści — jeśli układ wymaga ponownego dopasowania.
Komórki, które wyglądają na połączone, zachowują się jako oddzielne komórki po odczytaniu Komórki były dopasowane jedynie według szerokości, nie oznaczone jako CellMerge. Wywołaj Table.ConvertToHorizontallyMergedCells(), lub ustaw CellFormat.HorizontalMerge / VerticalMerge jawnie na komórkach, które powinny być połączone.
Usuwanie wierszy lub komórek pozostawia tabelę w nieprawidłowym stanie Word oczekuje, że każdy Table, Row, oraz Cell aby zachować minimalną prawidłową strukturę. Po programowym usunięciu zawartości, wywołaj EnsureMinimum() na właśnie zmodyfikowanym węźle.
Najczęściej zadawane pytania
Jak zbudować tabelę od podstaw zamiast edytować istniejącą?
Użyj DocumentBuilder: wywołaj StartTable(), następnie InsertCell() dla każdej komórki w wierszu, EndRow() aby zamknąć wiersz, powtórz dla kolejnych wierszy i EndTable() aby zamknąć tabelę.
Jak uzyskać tabele, które już istnieją w załadowanym dokumencie?
Odczytaj właściwość Tables (jest to TableCollection) na Body sekcji, którą Cię interesuje, lub na dowolnym innym Story, takim jak nagłówek lub stopka.
Jak ustawić tabelę jako procent szerokości strony zamiast stałej szerokości?
Przypisz Table.PreferredWidth = PreferredWidth.FromPercent(value) zamiast PreferredWidth.FromPoints(value).
Jaka jest różnica między ustawianiem obramowań przy użyciu SetBorders a SetBorder?
Table.SetBorders() stosuje jeden styl linii, szerokość i kolor do każdego obramowania w tabeli jednocześnie; Table.SetBorder() ustawia pojedynczą stronę, pozwalając różnym stronom mieć różne formatowanie.
Jak zresetować formatowanie komórki lub wiersza przed ponownym użyciem?
Wywołaj CellFormat.ClearFormatting() na CellFormat komórki, lub RowFormat.ClearFormatting() na RowFormat wiersza.