HotXLS 문서

TXLSTable / TXLSTables 클래스

유닛: lxHandle

BIFF8(.xls) Tables(Excel ListObjects). 표는 직사각형 범위에 이름이 있는 구조화된 참조 영역과 내장 스타일, 포함된 자동 필터를 연결합니다. 컬렉션은 TXLSWorksheet.Tables에 있으며, 가장 흔한 진입점은 AddTable입니다. 이 구조는 XLSX 쪽의 TXLSXTable / TXLSXTables와 대응하므로 통합 문서에 표를 추가하는 코드는 형식에 구애받지 않습니다. v2.33.0부터 제공

선언

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;

워크시트 단축키

TXLSWorksheet는 AddTable(AName, ARange, AColumns)을 제공하며, 이를 Tables.Add로 전달하고 새 표 개체를 반환하므로 저장 전에 StyleName이나 밴드 행 플래그를 조정할 수 있습니다

저장 시 동작

BIFF8 SaveAs(xlExcel97)에서는 시트가 먼저 FEATHEADR11 ($0871) 표 기능 헤더 하나를 내보내고, 각 표는 시트 EOF 앞에서 시트 보호 이후에 FEAT11 ($0872) TableFeatureType 페이로드와 LIST12 ($0877) 스타일 레코드를 내보냅니다. v2.87.4부터 LIST12 스타일 레코드는 밴드 행 / 열 플래그와 스타일 이름을 XLUnicodeString으로 포함하는 MS-XLS List12TableStyleClientInfo 레이아웃을 사용합니다. HotXLS는 더 이상 표 메타데이터에 레거시 FEATHEADR ($0867) 레코드를 내보내지 않습니다. 표가 없는 통합 문서는 이전과 정확히 같이 저장되며 표 레코드 스트림 오버헤드도 없습니다. Tables는 BIFF8+ 개념이므로 BIFF5 저장은 영향을 받지 않습니다

v2.33.2부터 BIFF8 writer는 같은 시트의 Table이 자동 필터 범위를 완전히 덮을 때 독립적인 시트 수준 AUTOFILTERINFO / AUTOFILTER 레코드도 함께 생략합니다. Excel이 Table 개체 자체 안에 자동 필터 드롭다운을 포함하기 때문입니다. v2.87.4부터는 Table 자체의 Feature11 메타데이터도 표 수준 및 필드 수준 AutoFilter 플래그를 설정하고, Table 필터 드롭다운에 Excel이 기대하는 빈 열별 Feat11FdaAutoFilter 블록을 내보냅니다

예제

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

참조

TXLSWorksheet.AddTable 메서드
TXLSWorksheet.Tables 속성
TXLSXTable / TXLSXTables (XLSX side)