HotXLS-Dokumentation

TXLSTable / TXLSTables-Klassen

Unit: lxHandle

BIFF8-.xls-Tabellen (Excel ListObjects). Eine Tabelle bindet einen benannten Bereich mit strukturierten Verweisen, einem eingebauten Stil und einem eingebetteten Autofilter an einen rechteckigen Bereich. Die Sammlung liegt auf TXLSWorksheet.Tables; verwende AddTable als gängigsten Einstiegspunkt. Die Form entspricht TXLSXTable / TXLSXTables auf der XLSX-Seite, sodass Code, der Tabellen zu einer Arbeitsmappe hinzufügt, vom Format abstrahiert bleiben kann. Verfügbar seit v2.33.0

Deklaration

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;

Tabellenblatt-Abkürzung

TXLSWorksheet bietet AddTable(AName, ARange, AColumns), das an Tables.Add weiterleitet und das neue Tabellenobjekt zurückgibt, damit du vor dem Speichern StyleName oder die Option für gebänderte Zeilen verfeinern kannst

Verhalten beim Speichern

Bei BIFF8 SaveAs(xlExcel97) schreibt das Blatt zuerst einen Table-Feature-Header FEATHEADR11 ($0871), danach schreibt jede Tabelle kurz vor dem Worksheet-EOF und nach dem Blattschutz einen FEAT11 ($0872)-TableFeatureType-Payload sowie einen LIST12 ($0877)-Stil-Datensatz. Seit v2.87.4 verwendet der LIST12-Stildatensatz das MS-XLS-Layout List12TableStyleClientInfo, einschließlich der Flags für gebänderte Zeilen/Spalten und des Stilnamens als XLUnicodeString. HotXLS schreibt den alten FEATHEADR ($0867)-Datensatz für Tabellenmetadaten nicht mehr. Arbeitsmappen ohne Tabellen speichern exakt wie zuvor und tragen keinen Tabellen-Record-Stream-Overhead. BIFF5-Speicherungen bleiben unverändert, weil Tabellen ein BIFF8+-Konzept sind

Seit v2.33.2 unterdrückt der BIFF8-Writer außerdem die eigenständigen blattebene AUTOFILTERINFO- / AUTOFILTER-Datensätze, wenn eine Tabelle auf demselben Blatt den Autofilter-Bereich vollständig abdeckt, weil Excel einen Autofilter-Dropdown direkt im Tabellenobjekt einbettet. Seit v2.87.4 setzt die eigene Feature11-Metadaten der Tabelle außerdem die AutoFilter-Flags auf Tabellen- und Feldebene und schreibt die leeren per-Spalte-Feat11FdaAutoFilter-Blöcke aus, die Excel für Tabellenfilter-Dropdowns erwartet

Beispiel

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);

Siehe auch

TXLSWorksheet.AddTable Methode
TXLSWorksheet.Tables Eigenschaft
TXLSXTable / TXLSXTables (XLSX side)