Dokumentacja HotXLS

Klasy TXLSTable / TXLSTables

Moduł: lxHandle

Tabele BIFF8 (.xls) (Excel ListObjects). Tabela przypina do prostokątnego zakresu nazwany obszar odwołań strukturalnych z wbudowanym stylem i osadzonym autofiltrem. Kolekcja znajduje się w TXLSWorksheet.Tables; jako najczęstszy punkt wejścia użyj AddTable. Kształt odpowiada TXLSXTable / TXLSXTables po stronie XLSX, więc kod dodający tabele do skoroszytu może być niezależny od formatu. Dostępne od v2.33.0

Deklaracja

type
  TXLSTable = class
    constructor Create;
    procedure Assign(Source: TXLSTable);
    property Id: Integer;                  // assigned by SaveAs (1..N per sheet)
    property Name: WideString;
    property DisplayName: WideString;
    property Range: WideString;             // e.g. "A1:F9"
    property Columns: TStringList;          // header text per column
    property StyleName: WideString;         // default 'TableStyleMedium2'
    property ShowFirstColumn: Boolean;      // default False
    property ShowLastColumn: Boolean;       // default False
    property ShowRowStripes: Boolean;       // default True
    property ShowColumnStripes: Boolean;    // default False
    property TotalsRowShown: Boolean;       // default False
  end;

  TXLSTables = class
    function Add: TXLSTable; overload;
    function Add(const AName, ARange: WideString;
      AColumns: TStrings): Integer; overload;
    procedure Delete(Index: Integer);
    procedure Clear;
    property Count: Integer;
    property Items[Index: Integer]: TXLSTable; default;
  end;

Skrót arkusza

TXLSWorksheet udostępnia AddTable(AName, ARange, AColumns), które przekazuje wywołanie do Tables.Add i zwraca nowy obiekt tabeli, aby można było dopracować jego StyleName lub flagi pasmowanych wierszy przed zapisem

Zachowanie podczas zapisu

W SaveAs(xlExcel97) dla BIFF8 arkusz emituje jeden nagłówek funkcji tabeli FEATHEADR11 ($0871), a następnie każda tabela emituje ładunek TableFeatureType w FEAT11 ($0872) oraz rekord stylu LIST12 ($0877) tuż przed EOF arkusza, po ochronie arkusza. Od v2.87.4 rekord stylu LIST12 używa układu MS-XLS List12TableStyleClientInfo, w tym flag pasmowanych wierszy / kolumn i nazwy stylu jako XLUnicodeString. HotXLS nie emituje już starego rekordu FEATHEADR ($0867) dla metadanych tabeli. Skoroszyty bez tabel zapisują się dokładnie tak jak wcześniej i nie niosą żadnego narzutu strumienia rekordów tabeli. Zapisy BIFF5 nie są dotknięte, ponieważ tabele są pojęciem BIFF8+

Od v2.33.2 zapisujący BIFF8 tłumi też samodzielne rekordy AUTOFILTERINFO / AUTOFILTER na poziomie arkusza, gdy tabela na tym samym arkuszu całkowicie pokrywa zakres autofiltrowania, ponieważ Excel osadza listę rozwijaną autofiltru wewnątrz samego obiektu Table. Od v2.87.4 własne metadane Feature11 tabeli ustawiają także flagi AutoFilter na poziomie tabeli i pola oraz emitują puste bloki Feat11FdaAutoFilter per kolumna, których Excel oczekuje dla list rozwijanych filtru tabeli

Przykład

var
  cols: TStringList;
begin
  Sheet.Cells.Item[1, 1].Value := 'Region';
  Sheet.Cells.Item[1, 2].Value := 'Product';
  Sheet.Cells.Item[1, 3].Value := 'Quarter';
  Sheet.Cells.Item[1, 4].Value := 'Revenue';
  // ... nine data rows below ...

  cols := TStringList.Create;
  try
    cols.Add('Region');
    cols.Add('Product');
    cols.Add('Quarter');
    cols.Add('Revenue');
    with Sheet.AddTable('SalesTable', 'A1:D10', cols) do
    begin
      StyleName       := 'TableStyleMedium2';
      ShowRowStripes  := True;
    end;
  finally
    cols.Free;
  end;

  Workbook.SaveAs('SalesTable.xls', xlExcel97);

Zobacz też

TXLSWorksheet.AddTable metoda
TXLSWorksheet.Tables właściwość
TXLSXTable / TXLSXTables (XLSX side)