Tài liệu HotXLS

TCondFormat / TCondFormatRule

Đơn vị: lxCondFormat

Họ định dạng có điều kiện BIFF8 (.xls) hỗ trợ các quy tắc mở rộng của Excel 2007+ TXLSWorksheet giữ một collection TCondFormat; mỗi mục bao phủ một hoặc nhiều dải ô và chứa danh sách có thứ tự các đối tượng TCondFormatRule, mỗi quy tắc là một quy tắc giá trị ô kiểu cũ hoặc một quy tắc CF12 Data Bar / Color Scale / Icon Set. Bốn điểm vào Sheet.AddCondFormat* (DataBar, ColorScale2, ColorScale3, IconSet) tạo ra các quy tắc đúng kiểu con. Có sẵn từ v2.34.0

Threshold kind enumeration

type
  TXLSCfValueKind = (
    cfvNumber      = 0,
    cfvMinOfRange  = 1,
    cfvMaxOfRange  = 2,
    cfvPercent     = 3,
    cfvPercentile  = 4,
    cfvFormula     = 5,
    cfvAutoMin     = 6,  // Excel 2010+ data-bar only
    cfvAutoMax     = 7); // Excel 2010+ data-bar only

Liệt kê các họ biểu tượng

type
  TXLSIconSetType = (
    icsArrows3, icsArrows3Gray, icsFlags3,
    icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
    icsSymbols3, icsSymbolsUncircled3,
    icsArrows4, icsArrows4Gray, icsRedToBlack4,
    icsRatings4, icsTrafficLights4,
    icsArrows5, icsArrows5Gray,
    icsRatings5, icsQuarters5);

17 họ biểu tượng mặc định của Excel 2007. Số lượng điểm dừng số học (3, 4 hoặc 5) được mã hóa trong tên enum

Threshold giá trị (cfvo)

type
  TXLSCfValue = class
    constructor Create(AKind: TXLSCfValueKind;
      const AValue: WideString; AColor: LongWord);
    procedure SetThemeColor(ThemeId: Word; Tint: Single); // v2.43.0+
    procedure ClearThemeColor;                            // v2.43.0+
    property Kind: TXLSCfValueKind;
    property Value: WideString;       // numeric literal or formula text
    property Color: LongWord;         // BGR RGB for ColorScale stops
    property IsThemeColor: Boolean;    // v2.43.0+ true = theme mode active
    property ThemeColorId: Word;       // v2.43.0+ theme palette index
    property ThemeColorTint: Single;   // v2.43.0+ -1.0 .. 0.0 .. +1.0
  end;

Payload thanh dữ liệu

type
  TXLSDataBarSpec = class
    procedure SetThemeColor(ThemeId: Word; Tint: Single); // v2.43.0+ — opt bar fill into theme mode
    procedure ClearThemeColor;                            // v2.43.0+ — revert to RGB Color
    property Min: TXLSCfValue;
    property Max: TXLSCfValue;
    property Color: LongWord;         // bar fill
    property ShowValue: Boolean;      // false = hide cell text
    property MinLength: Byte;         // 0..100 percent
    property MaxLength: Byte;         // 0..100 percent
    property IsThemeColor: Boolean;    // v2.43.0+ true = theme mode active
    property ThemeColorId: Word;       // v2.43.0+ theme palette index
    property ThemeColorTint: Single;   // v2.43.0+ -1.0 .. 0.0 .. +1.0
  end;

Đồng bộ màu theme của XLSX (từ v2.43.0 trở lên)

Màu tô của thanh dữ liệu và màu của từng điểm dừng trong quy tắc Color Scale có thể được đặt theo chỉ số theme của workbook cùng giá trị tint qua SetThemeColor(ThemeId, Tint) thay vì RGB cố định. Bộ ghi XLSX phát ra <color theme="N"/> khi Tint đúng bằng 0.0 hoặc <color theme="N" tint="0.5"/> khi khác 0, khớp với đầu ra "shortest form" của chính Excel. Bộ đọc phân tích cả hai tổ hợp thuộc tính và quay về đường rgb= khi không có theme lẫn tint. Hai chế độ loại trừ nhau trên mỗi ô; lần gọi Set sau cùng sẽ thắng. IsThemeColor phản ánh chế độ đang hoạt động để kiểm tra

BIFF8 CF12 chỉ lưu màu RGB đã được phân giải — chế độ theme chỉ được round-trip trên backend XLSX trong bản phát hành này. Các quy tắc iconSet không có phần tử <color> nên bổ sung chế độ theme không ảnh hưởng đến chúng

Payload Color Scale

type
  TXLSColorScaleSpec = class
    constructor Create(IsThreeStop: Boolean);
    procedure SetStop(I: Integer; Kind: TXLSCfValueKind;
      const Value: WideString; Color: LongWord);
    property StopCount: Integer;      // 2 or 3
    property Stops[I: Integer]: TXLSCfValue; default;
  end;

Payload bộ biểu tượng

type
  TXLSIconSetSpec = class
    constructor Create(ASetType: TXLSIconSetType);
    procedure SetThreshold(I: Integer; Kind: TXLSCfValueKind;
      const Value: WideString);
    // Per-stop icon override (v2.44.0+).
    procedure SetIconOverride(I: Integer;
      OverrideSet: TXLSIconSetType; IconId: Byte);
    procedure ClearIconOverride(I: Integer);
    property SetType: TXLSIconSetType;
    property Reverse: Boolean;        // reverse the icon order
    property ShowOnly: Boolean;       // true = icon only, hide cell text
    property IconCount: Integer;      // 3, 4 or 5 (derived from SetType)
    property Thresholds[I: Integer]: TXLSCfValue;
    property HasIconOverride[I: Integer]: Boolean;        // v2.44.0+
    property IconOverrideSet[I: Integer]: TXLSIconSetType; // v2.44.0+
    property IconOverrideId[I: Integer]: Byte;             // v2.44.0+
  end;

Ghi đè biểu tượng trên từng điểm dừng (từ v2.44.0 trở lên)

Mỗi điểm dừng trong một quy tắc Icon Set có thể ghi đè biểu tượng hiển thị bằng bất kỳ biểu tượng nào từ bất kỳ trong 17 họ biểu tượng dựng sẵn, được định danh bằng một cặp (OverrideSet, IconId). XLSX phát ra <cfIcon iconSet="..." iconId="N"/> cho mỗi điểm dừng đã ghi đè. BIFF8 CF12 vẫn hiển thị biểu tượng mặc định của họ vì định dạng dây BIFF8 không có chỗ cho ghi đè theo từng điểm dừng — đây là khả năng chỉ có ở XLSX trong bản phát hành hiện tại. HasIconOverride[i] chỉ trả về True cho các điểm dừng đã được bật rõ ràng qua SetIconOverride; các điểm dừng dùng biểu tượng mặc định vẫn tiếp tục dùng biểu tượng mặc định theo vị trí điểm dừng của họ

Rule

type
  TCondFormatRule = class
    property Kind: TXLSCfKind;
    property cfType: Word;            // CF-record subtype
    property Operator_: Word;         // comparison operator for cellIs
    property DataBar: TXLSDataBarSpec;       // non-nil for Data Bar rules
    property ColorScale: TXLSColorScaleSpec; // non-nil for Color Scale rules
    property IconSet: TXLSIconSetSpec;       // non-nil for Icon Set rules
    property Style: TXLSDxfStyle;        // DXF override; lazy-created (v2.35.0+)
    property DxfBlob: TXLSBlob;       // raw DXF bytes from Parse (v2.35.0+)
    property Priority: Word;          // CF12 ipriority; 0 = writer assigns (v2.45.0+)
  end;

Chỉ một trong DataBar / ColorScale / IconSet là khác nil trên mỗi quy tắc CF12, khớp với Kind của quy tắc. Các quy tắc cellIs cũ (không phải CF12) để cả ba ở nil và dùng Operator_ + Formula1 / Formula2

Thuộc tính Style (từ v2.35.0 trở lên) được tạo lười khi đọc lần đầu; đối tượng trả về thuộc sở hữu của quy tắc và được giải phóng trong destructor của nó. Đặt HasXxx thông qua lệnh SetXxx tương ứng trên Style. Bộ đọc BIFF8 giữ lại các byte thô trong DxfBlob ngoài việc giải mã chúng vào Style (v2.35.1+), nên vòng tải-sửa-lưu sẽ phản ánh mọi thay đổi của Style sau khi tải; nếu người dùng không chạm vào nó, tệp đã lưu mang cùng các override như bản gốc

Trên các quy tắc Data Bar, Color Scale và Icon Set CF12 của BIFF8 CF12, [MS-XLS] yêu cầu khối DXF nội tuyến phải rỗng. Từ v2.87.4, HotXLS tuân theo quy tắc đó: các override style gán qua Rule.Style không được tuần tự hóa cho ba kiểu CF12 này khi lưu tệp .xls. Bản thân cấu hình quy tắc Data Bar / Color Scale / Icon Set vẫn được giữ qua phần đuôi riêng của CF12. Đầu ra định dạng có điều kiện XLSX không bị ảnh hưởng

Container

type
  TCondFormat = class
    procedure ClearRow(row: Integer);
    procedure ClearCol(col: Integer);
    procedure ClearRange(row1, col1, row2, col2: Integer);
    procedure MoveRanges(row1, col1, row2, col2,
      drow, dcol: Integer);
    function  RuleCount: Integer;                // v2.40.0+
    function  Rule(I: Integer): TCondFormatRule;  // v2.40.0+
    property Range[i: Integer]: TCondRange; default;
    property IsEmpty: Boolean;
    property IsExt12: Boolean;       // true = emits CONDFMT12/CF12
    property IsShadowed: Boolean;    // v2.37.0+ — duplicate CONDFMT marker
    property TotalRange: TCondRange; // v2.37.0+ — merged-extent range
  end;

Cross-Phiên bản shadow detection (v2.37.0+)

Các tệp do Excel lưu thường mang cả một CONDFMT kiểu Excel 2003 theo giá trị ô và một CONDFMT12 kiểu Excel 2007+ bao cùng một sqref — bản ghi giá trị ô là dự phòng xuyên phiên bản để Excel cũ vẫn hiển thị được. Bộ đọc đánh dấu mục cũ hơn bằng IsShadowed = True sau khi phát hiện khớp hộp bao ngoài chính xác trên TotalRange, để mã phía người dùng duyệt collection định dạng có điều kiện có thể bỏ qua bản sao. Bộ ghi vẫn phát ra cả hai họ bản ghi khi lưu để tương thích giữa Excel 2003 và Excel 2007+

Wire định dạng

Trên BIFF8 SaveAs(xlExcel97), các quy tắc CF12 phát ra bản ghi CONDFMT12 ($0879) + CF12 ($087A) cùng với CONDFMT ($01B0) + CF ($01B1) cũ để tương thích xuyên phiên bản với Excel 2003. Bộ đọc nhận ra các bản ghi hiện đại và bộc lộ chúng qua cùng mô hình quy tắc trong bộ nhớ, nên các tệp .xls do Excel tạo có quy tắc mở rộng có thể round-trip mà không mất dữ liệu

Ví dụ

// Data bar with custom min/max thresholds.
with Sheet.AddCondFormatDataBar('A1:A10', $00FF0000,
  cfvNumber, '0', cfvNumber, '100').DataBar do
begin
  ShowValue := True;
  MinLength := 10;
  MaxLength := 90;
end;

// 3 Arrows icon set, reversed so green points down.
with Sheet.AddCondFormatIconSet('B1:B10', icsArrows3).IconSet do
begin
  Reverse  := True;
  ShowOnly := False;
end;

Xem thêm

TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (phía XLSX)