Documentação do HotXLS

Classes TXLSTable / TXLSTables

Unidade: lxHandle

Tabelas BIFF8 (.xls) (Excel ListObjects). Uma tabela associa a um intervalo retangular um nome de referência estruturada, um estilo incorporado e um AutoFilter embutido. A coleção vive em TXLSWorksheet.Tables; use AddTable como ponto de entrada mais comum. A forma espelha TXLSXTable / TXLSXTables do lado XLSX, pelo que o código que adiciona tabelas a um livro pode ser agnóstico ao formato. Disponível desde v2.33.0

Declaração

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;

Atalho de folha de cálculo

TXLSWorksheet expõe AddTable(AName, ARange, AColumns) que encaminha para Tables.Add e devolve o novo objeto tabela para que possa afinar o seu StyleName ou sinalizadores de linhas alternadas antes de guardar

Comportamento no momento de guardar

Em SaveAs(xlExcel97) no BIFF8, a folha emite um cabeçalho FEATHEADR11 ($0871) de funcionalidade de tabela, depois cada tabela emite uma carga útil FEAT11 ($0872) TableFeatureType mais um registo de estilo LIST12 ($0877) imediatamente antes do EOF da folha, após a proteção da folha. Desde v2.87.4 o registo de estilo LIST12 usa o esquema MS-XLS List12TableStyleClientInfo, incluindo os sinalizadores de linha/coluna alternadas e o nome do estilo como um XLUnicodeString HotXLS já não emite o registo legado FEATHEADR ($0867) para metadados de tabela. Livros sem tabelas guardam exatamente como antes e não têm sobrecarga de fluxo de registos de tabela. Os guardados BIFF5 não são afetados porque Tables é um conceito BIFF8+

Desde v2.33.2 o escritor BIFF8 também suprime os registos autónomos de nível de folha AUTOFILTERINFO / AUTOFILTER quando uma Table na mesma folha cobre totalmente o intervalo do AutoFilter, porque o Excel incorpora uma lista suspensa de AutoFilter no próprio objeto Table. Desde v2.87.4 os metadados Feature11 da tabela também definem os sinalizadores AutoFilter ao nível da tabela e do campo e emitem os blocos vazios Feat11FdaAutoFilter por coluna que o Excel espera para listas suspensas de filtro de tabela

Exemplo

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

Ver também

método TXLSWorksheet.AddTable
propriedade TXLSWorksheet.Tables
TXLSXTable / TXLSXTables (XLSX side)