Clasa TCondFormat
Unitate: lxCondFormat
Familia de formatare condițională BIFF8 (.xls) care acceptă regulile de extensie Excel 2007+. TXLSWorksheet păstrează o colecție de intrări TCondFormat; fiecare intrare acoperă unul sau mai multe intervale de celule și conține o listă ordonată de obiecte TCondFormatRule, fiecare regulă fiind fie o regulă veche pe valoare de celulă, fie o regulă CF12 Data Bar / Color Scale / Icon Set. Cele patru puncte de intrare Sheet.AddCondFormat* (DataBar, ColorScale2, ColorScale3, IconSet) construiesc reguli ale subtipului corect. Disponibil din v2.34.0
Enumerare tip prag
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
Enumerare familie set pictograme
type
TXLSIconSetType = (
icsArrows3, icsArrows3Gray, icsFlags3,
icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
icsSymbols3, icsSymbolsUncircled3,
icsArrows4, icsArrows4Gray, icsRedToBlack4,
icsRatings4, icsTrafficLights4,
icsArrows5, icsArrows5Gray,
icsRatings5, icsQuarters5);
Cele 17 familii de pictograme Excel 2007 de bază. Numărul numeric de opriri (3, 4 sau 5) este codificat în numele enum-ului
Valoare prag (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 bară de date
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;
Rund-trip al culorii temei XLSX (v2.43.0+)
Culoarea de umplere a barei într-o regulă Data Bar și culorile per stop dintr-o regulă Color Scale pot fi setate față de un index de temă al registrului de lucru plus o valoare tint prin SetThemeColor(ThemeId, Tint) în locul unui RGB fix. Scriitorul XLSX emite <color theme="N"/> când Tint este exact 0.0 sau <color theme="N" tint="0.5"/> când este nenul, potrivindu-se cu propria ieșire în "formă cea mai scurtă" a Excel. Cititorul analizează ambele combinații de atribute și revine la calea RGB rgb= când nu este prezent nici theme, nici tint. Cele două moduri se exclud reciproc pentru fiecare slot; ultimul Set apelat câștigă. IsThemeColor reflectă modul activ pentru inspecție
BIFF8 CF12 stochează doar culoarea RGB rezolvată — modul temă face round-trip exclusiv pe backend-ul XLSX în această versiune. Regulile iconSet nu au elemente <color>, deci adăugarea modului temă nu le afectează
Payload scară de culori
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 set pictograme
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;
Suprascriere a pictogramei pentru fiecare stop (v2.44.0+)
Fiecare stop dintr-o regulă Icon Set poate suprascrie pictograma afișată cu orice pictogramă din oricare dintre cele 17 familii de pictograme încorporate, identificată printr-o pereche (OverrideSet, IconId). XLSX emite <cfIcon iconSet="..." iconId="N"/> pentru fiecare stop suprascris. BIFF8 CF12 continuă să redea pictograma implicită a familiei, deoarece formatul BIFF8 pe fir nu are un slot pentru suprascriere per stop — aceasta este o capabilitate doar XLSX în versiunea curentă. HasIconOverride[i] returnează True doar pentru stopurile care au fost bifate explicit prin SetIconOverride; stopurile cu pictograma implicită continuă să folosească pictograma implicită a poziției din familie
Regulă
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;
Exact una dintre DataBar / ColorScale / IconSet este nenulă pentru fiecare regulă CF12, potrivindu-se cu Kind-ul regulii. Regulile cellIs moștenite (non-CF12) lasă toate trei valori nil și folosesc Operator_ + Formula1 / Formula2
Style (v2.35.0+) este creat leneș la prima citire; obiectul returnat este deținut de regulă și eliberat în destructorul ei. Setează HasXxx prin apelul corespunzător SetXxx pe Style. Cititorul BIFF8 păstrează și bytes-ii brute în DxfBlob pe lângă decodarea lor în Style (v2.35.1+), astfel încât un round-trip încărcare-editare-salvare reflectă orice modificare a Style de după încărcare; dacă utilizatorul nu îl atinge, fișierul salvat păstrează aceleași suprascrieri ca originalul
Pe regulile BIFF8 CF12 Data Bar, Color Scale și Icon Set, [MS-XLS] cere ca blocul DXF inline să fie gol. Începând cu v2.87.4, HotXLS respectă această regulă: suprascrierile de stil atribuite prin Rule.Style nu sunt serializate pentru acele trei tipuri CF12 la salvarea fișierelor .xls. Configurația regulii Data Bar / Color Scale / Icon Set este totuși păstrată prin coada specifică tipului CF12. Ieșirea de formatare condițională XLSX nu este afectată
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-Versiune shadow detection (v2.37.0+)
Fișierele salvate de Excel poartă adesea atât un CONDFMT de valoare de celulă Excel 2003, cât și un CONDFMT12 Excel 2007+ care acoperă același sqref — înregistrarea de valoare de celulă este un fallback între versiuni pe care Excel-ul mai vechi îl poate reda în continuare. Cititorul marchează intrarea mai veche prin IsShadowed = True după ce detectează o potrivire exactă de bounding-box pe TotalRange, astfel încât codul orientat spre utilizator care iterează colecția de formatare condițională poate sări peste duplicat. Scriitorul continuă să emită ambele familii de înregistrări la salvare pentru compatibilitate Excel 2003 ↔ Excel 2007+
Format wire
La SaveAs(xlExcel97) pe BIFF8, regulile CF12 emit CONDFMT12 ($0879) + CF12 ($087A) alături de CONDFMT ($01B0) + CF ($01B1) moștenite, pentru compatibilitate între versiuni cu Excel 2003. Cititorul recunoaște înregistrările moderne și le expune prin același model de reguli în memorie, astfel încât fișierele .xls create în Excel cu reguli de extensie să facă round-trip fără pierdere de date
Exemplu
// 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;
Vedeți și
TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (partea XLSX)