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)