เอกสาร HotXLS

TXLSTable

หน่วย: lxHandle

ตาราง BIFF8 (.xls) (Excel ListObjects) ตารางจะผูกพื้นที่อ้างอิงแบบมีชื่อ พร้อมสไตล์ในตัวและ autofilter ที่ฝังไว้กับช่วงสี่เหลี่ยมผืนผ้า คอลเลกชันอยู่บน TXLSWorksheet.Tables; ใช้ AddTable เป็นจุดเข้าใช้ที่พบบ่อยที่สุด รูปแบบสอดคล้องกับ TXLSXTable / TXLSXTables ฝั่ง XLSX ดังนั้นโค้ดที่เพิ่มตารางให้เวิร์กบุ๊กจึงไม่ขึ้นกับรูปแบบไฟล์ มีให้ใช้ตั้งแต่ v2.33.0

Declaration

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;

เวิร์กชีต shortcut

TXLSWorksheet เปิดเผย AddTable(AName, ARange, AColumns) ซึ่งส่งต่อไปยัง Tables.Add และคืนอ็อบเจ็กต์ตารางใหม่ให้คุณปรับ StyleName หรือแฟลก banded-row ก่อนบันทึก

พฤติกรรมตอนบันทึก

บน BIFF8 SaveAs(xlExcel97) แผ่นงานจะปล่อยหัวฟีเจอร์ตาราง FEATHEADR11 ($0871) หนึ่งรายการ จากนั้นแต่ละตารางจะปล่อยเพย์โหลด FEAT11 ($0872) TableFeatureType พร้อมระเบียนสไตล์ LIST12 ($0877) ก่อน EOF ของเวิร์กชีต หลังการป้องกันชีต ตั้งแต่ v2.87.4 ระเบียนสไตล์ LIST12 ใช้เค้าโครง MS-XLS List12TableStyleClientInfo รวมแฟล็ก banded row / column และชื่อสไตล์เป็น XLUnicodeString HotXLS จะไม่ปล่อยระเบียน FEATHEADR ($0867) แบบเก่าสำหรับเมตาดาต้าตารางอีกต่อไป เวิร์กบุ๊กที่ไม่มีตารางจะบันทึกเหมือนเดิมทุกประการและไม่มี overhead ของสตรีมระเบียนตาราง BIFF5 saves ไม่ได้รับผลเพราะ Tables เป็นแนวคิดของ BIFF8+

ตั้งแต่ v2.33.2 ตัวเขียน BIFF8 ยังจะระงับระเบียน AUTOFILTERINFO / AUTOFILTER ระดับชีตแบบแยกต่างหากเมื่อ Table บนชีตเดียวกันครอบคลุมช่วง autofilter จนครบ เพราะ Excel ฝังดรอปดาวน์ autofilter ไว้ในอ็อบเจ็กต์ Table เอง ตั้งแต่ v2.87.4 เมตาดาต้า Feature11 ของ table เองยังตั้งแฟล็กระดับ table และระดับ field ของ AutoFilter และปล่อยบล็อก Feat11FdaAutoFilter ต่อคอลัมน์ที่ว่างตามที่ Excel คาดไว้สำหรับดรอปดาวน์ตัวกรองของ table

ตัวอย่าง

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)