Praca z tabelami

Praca z tabelami

Aspose.Cells FOSS dla Java obsługuje tabele Excel (znane również jako ListObjects lub odwołania strukturalne). Możesz tworzyć nowe tabele z zakresów komórek, przeglądać istniejące tabele, konfigurować wiersze nagłówka i sum, stosować wbudowane style tabel, uzyskiwać dostęp do poszczególnych kolumn oraz konwertować tabele z powrotem do zwykłych zakresów. Głównym punktem wejścia jest ListObjectCollection, dostępny przez Worksheet.getListObjects().


Przegląd

Tabele w arkuszu są zarządzane za pomocą ListObjectCollection zwracanego przez Worksheet.getListObjects(). Każdy ListObject reprezentuje jedną tabelę Excel i udostępnia jej nazwę wyświetlaną, komentarz, granice zakresu komórek, kolekcję kolumn, ustawienia stylu oraz widoczność wiersza nagłówka/sum.

Nowa tabela jest tworzona przy użyciu ListObjectCollection.add(startRow, startColumn, endRow, endColumn, hasHeaders), który zwraca indeks zerowy nowo utworzonej tabeli. Alternatywna przeciążona wersja przyjmuje ciągi nazw komórek: ListObjectCollection.add(startCellName, endCellName, hasHeaders).


Kluczowe klasy

KlasaOpis
ListObjectReprezentuje pojedynczą tabelę Excel. Udostępnia getDisplayName(), getComment(), współrzędne zakresu, kolekcję kolumn, typ stylu oraz widoczność wiersza nagłówka/wiersza sum.
ListObjectCollectionZbiór wszystkich tabel na arkuszu. Obsługuje getCount(), indeksowane i nazwane wyszukiwanie za pomocą get(), add(), remove() oraz pomocników konwersji typu stylu.
ListColumnReprezentuje jedną kolumnę w tabeli. Udostępnia identyfikator kolumny, nazwę oraz ustawienia obliczeń wiersza sum.
ListColumnCollectionUporządkowana kolekcja kolumn w tabeli. Iterowalna, z dostępem do liczby elementów i indeksu.
TableStyleTypeEnum identyfikujący wbudowany styl tabeli Excel (Light 1–21, Medium 1–28, Dark 1–11 lub Custom/None).
TotalsCalculationEnum określający funkcję agregacji w wierszu sumarycznym tabeli (SUM, COUNT, AVERAGE, MAX, MIN, STD_DEV, VAR, COUNT_NUMS, CUSTOM, NONE).

Uzyskiwanie dostępu do tabel w arkuszu

Pobierz ListObjectCollection z dowolnego Worksheet za pomocą Worksheet.getListObjects(). Użyj ListObjectCollection.getCount(), aby określić, ile tabel istnieje. Poszczególne tabele są dostępne przez indeks zerowy za pomocą ListObjectCollection.get(index) lub przez nazwę wyświetlaną za pomocą ListObjectCollection.get(name).

Workbook wb = new Workbook("input.xlsx");
WorksheetCollection sheets = wb.getWorksheets();
Worksheet ws = sheets.get(0);
ListObjectCollection tables = ws.getListObjects();

for (int i = 0; i < tables.getCount(); i++) {
    ListObject table = tables.get(i);
    System.out.println("Table: " + table.getDisplayName()
        + " rows: " + table.getStartRow() + "-" + table.getEndRow());
}

Tworzenie nowej tabeli

Użyj ListObjectCollection.add(), aby wstawić tabelę na zakres komórek. Parametr hasHeaders wskazuje, czy pierwszy wiersz zakresu zawiera nagłówki kolumn.

Workbook wb = new Workbook();
WorksheetCollection sheets = wb.getWorksheets();
Worksheet ws = sheets.get(0);

// Populate data
ws.getCells().get("A1").putValue("Product");
ws.getCells().get("B1").putValue("Quantity");
ws.getCells().get("A2").putValue("Widget");
ws.getCells().get("B2").putValue(100);

// Create table over A1:B2 with headers in row 0
int tableIndex = ws.getListObjects().add(0, 0, 1, 1, true);
ListObject table = ws.getListObjects().get(tableIndex);
table.setDisplayName("SalesTable");

Sprawdzanie właściwości tabeli

Gdy posiadasz odniesienie ListObject, możesz odczytać:

  • ListObject.getDisplayName() — ciąg znaków wyświetlanej nazwy tabeli.
  • ListObject.getComment() — opcjonalny komentarz powiązany z tabelą.
  • ListObject.getStartRow() / ListObject.getStartColumn() — lewa górna komórka zakresu tabeli.
  • ListObject.getEndRow() / ListObject.getEndColumn() — prawa dolna komórka zakresu tabeli.
  • ListObject.isShowHeaderRow() — czy wiersz nagłówka jest widoczny.
  • ListObject.isShowTotals() — czy wiersz sum jest widoczny.
  • ListObject.getListColumns()ListColumnCollection dla tabeli.

Stylowanie tabel

Zastosuj wbudowany styl tabeli przy użyciu ListObject.setTableStyleType(TableStyleType). Wyliczenie TableStyleType zawiera warianty Light (1–21), Medium (1–28) i Dark (1–11) oraz NONE i CUSTOM.

ListObject table = ws.getListObjects().get(0);
table.setTableStyleType(TableStyleType.TABLE_STYLE_MEDIUM_2);

Dodatkowe przełączniki stylu sterują paskowanymi wierszami, paskowanymi kolumnami oraz podkreśleniem pierwszej i ostatniej kolumny:

  • ListObject.setShowTableStyleRowStripes(boolean)
  • ListObject.setShowTableStyleColumnStripes(boolean)
  • ListObject.setShowTableStyleFirstColumn(boolean)
  • ListObject.setShowTableStyleLastColumn(boolean)

Możesz także ustawić niestandardową nazwę stylu przy użyciu ListObject.setTableStyleName(String).

Metody pomocnicze ListObjectCollection.parseTableStyleType(String) i ListObjectCollection.tableStyleTypeName(TableStyleType) konwertują pomiędzy wyliczeniem a jego reprezentacją tekstową.


Praca z kolumnami tabeli

Uzyskaj dostęp do poszczególnych kolumn za pośrednictwem ListObject.getListColumns(), które zwraca ListColumnCollection. Każdy ListColumn udostępnia:

  • ListColumn.getId() — identyfikator kolumny OOXML liczony od 1.
  • ListColumn.getName() / ListColumn.setName(String) — tekst nagłówka kolumny.
  • ListColumn.getTotalsCalculation() / ListColumn.setTotalsCalculation(TotalsCalculation) — funkcja agregacji dla wiersza sum.
  • ListColumn.getTotalsRowLabel() / ListColumn.setTotalsRowLabel(String) — niestandardowa etykieta w wierszu sum.
  • ListColumn.getTotalsRowFormula() / ListColumn.setTotalsRowFormula(String) — niestandardowa formuła dla wiersza sum.
ListObject table = ws.getListObjects().get(0);
ListColumnCollection columns = table.getListColumns();
for (int i = 0; i < columns.getCount(); i++) {
    ListColumn col = columns.get(i);
    System.out.println("Column " + col.getId() + ": " + col.getName());
}

Konfigurowanie wiersza sum

Włącz wiersz sum przy użyciu ListObject.setShowTotals(true), a następnie ustaw funkcje agregacji dla poszczególnych kolumn, korzystając z wyliczenia TotalsCalculation.

ListObject table = ws.getListObjects().get(0);
table.setShowTotals(true);

ListColumn qtyColumn = table.getListColumns().get(1);
qtyColumn.setTotalsCalculation(TotalsCalculation.SUM);

ListColumn labelColumn = table.getListColumns().get(0);
labelColumn.setTotalsRowLabel("Total");

Zmiana rozmiaru i konwersja tabel

Zmień rozmiar tabeli, aby obejmowała inny zakres komórek, używając ListObject.resize(startRow, startColumn, endRow, endColumn, hasHeaders).

Konwertuj tabelę z powrotem do zwykłego zakresu komórek przy użyciu ListObject.convertToRange(). Spowoduje to usunięcie struktury tabeli przy zachowaniu danych i formatowania komórek.

Usuń tabelę całkowicie z kolekcji za pomocą ListObjectCollection.removeAt(index).


AutoFilter w tabelach

Pokaż lub usuń strzałki automatycznego filtru rozwijanego w kolumnie w tabeli:

  • ListObject.showAutoFilter() — wyświetl strzałki filtru w wierszu nagłówka.
  • ListObject.removeAutoFilter() — ukryj strzałki filtru.

API Reference Podsumowanie

ListObject

MetodaTyp zwracanyOpis
getDisplayName()StringWyświetlana nazwa tabeli.
setDisplayName(name)voidUstawia nazwę wyświetlaną.
getComment()StringOpcjonalny komentarz do tabeli.
setComment(comment)voidUstawia komentarz tabeli.
getStartRow()intPoczątkowy indeks wiersza zakresu tabeli.
getStartColumn()intPoczątkowy indeks kolumny zakresu tabeli.
getEndRow()intKońcowy indeks wiersza zakresu tabeli.
getEndColumn()intKońcowy indeks kolumny zakresu tabeli.
isShowHeaderRow()booleanCzy wiersz nagłówka jest widoczny.
setShowHeaderRow(show)voidPokazuje lub ukrywa wiersz nagłówka.
isShowTotals()booleanCzy wiersz sum jest widoczny.
setShowTotals(show)voidWyświetla lub ukrywa wiersz sum.
getTableStyleType()TableStyleTypeWbudowany styl tabeli.
setTableStyleType(type)voidZastosowuje wbudowany styl tabeli.
getTableStyleName()StringNazwa własnego stylu tabeli.
setTableStyleName(name)voidUstawia niestandardową nazwę stylu tabeli.
getListColumns()ListColumnCollectionZbiór kolumn tabeli.
resize(...)voidZmienia rozmiar tabeli do nowego zakresu.
convertToRange()voidKonwertuje tabelę do normalnego zakresu.
showAutoFilter()voidWyświetla strzałki automatycznego filtrowania.
removeAutoFilter()voidUkrywa strzałki automatycznego filtrowania.

ListObjectCollection

MetodaTyp zwracanyOpis
getCount()intLiczba tabel w arkuszu.
get(index)ListObjectZwraca tabelę o podanym indeksie zerowym.
get(name)ListObjectZwraca tabelę o podanej nazwie wyświetlanej.
add(startRow, startColumn, endRow, endColumn, hasHeaders)intTworzy nową tabelę; zwraca jej indeks.
add(startCellName, endCellName, hasHeaders)intTworzy nową tabelę na podstawie nazw komórek; zwraca jej indeks.
removeAt(index)voidUsuwa tabelę o podanym indeksie.
parseTableStyleType(name)TableStyleTypeKonwertuje ciąg znaków na wartość wyliczeniową TableStyleType.
tableStyleTypeName(type)StringKonwertuje wyliczenie TableStyleType enum na jego nazwę jako ciąg znaków.

ListColumn

MetodaTyp zwracanyOpis
getId()intJednoindeksowy identyfikator kolumny OOXML.
getName()StringTekst nagłówka kolumny.
setName(name)voidUstawia tekst nagłówka kolumny.
getTotalsCalculation()TotalsCalculationFunkcja agregacji wiersza sumy.
setTotalsCalculation(calc)voidUstawia agregację wiersza sumarycznego.
getTotalsRowLabel()StringNiestandardowa etykieta w wierszu sumy.
setTotalsRowLabel(label)voidUstawia etykietę wiersza sumy.
getTotalsRowFormula()StringNiestandardowa formuła dla wiersza sum.
setTotalsRowFormula(formula)voidUstawia formułę wiersza sumy.

Ograniczenia

  • Powiązania danych tabeli nie są modyfikowalne osobno; tabela obejmuje zakres określony w momencie tworzenia. Użyj resize(), aby dostosować obejmowany zakres.
  • Niestandardowe style tabel muszą być zdefiniowane w skoroszycie przed odwołaniem się do nich po nazwie za pomocą setTableStyleName().

Zobacz także

 Polski