HotXLS ドキュメント

TXLSTable / TXLSTables クラス

ユニット: lxHandle

BIFF8 (.xls) の Tables(Excel ListObject)です。テーブルは、名前付きの構造化参照領域に組み込みスタイルと埋め込みオートフィルターを付けて長方形の範囲に割り当てます。コレクションは 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) では、シートはまず 1 つの FEATHEADR11 ($0871) テーブル機能ヘッダーを出力し、各テーブルはシート EOF の直前、かつシート保護の後に FEAT11 ($0872) TableFeatureType ペイロードと LIST12 ($0877) スタイル レコードを出力します。v2.87.4 以降、LIST12 スタイル レコードは MS-XLS の List12TableStyleClientInfo レイアウトを使い、交互行 / 列フラグとスタイル名を XLUnicodeString として含めます。HotXLS はテーブル メタデータ用の旧 FEATHEADR ($0867) レコードを出力しなくなりました。テーブルのないブックはこれまでどおり保存され、テーブル レコード ストリームのオーバーヘッドはありません。Tables は BIFF8 以降の概念なので、BIFF5 の保存には影響しません

v2.33.2 以降、BIFF8 ライターは、同じシート上の Table がオートフィルター範囲を完全に覆う場合、独立したシート レベルの AUTOFILTERINFO / AUTOFILTER レコードも抑止します。これは、Excel が Table オブジェクト自体の中にオートフィルターのドロップダウンを埋め込むためです。v2.87.4 以降は、テーブル自身の Feature11 メタデータもテーブル レベルとフィールド レベルの AutoFilter フラグを設定し、テーブル フィルターのドロップダウンに 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)