TCondFormat / TCondFormatRule og CF12-spec-klasser
Enhed: lxCondFormat
BIFF8-(.xls)-familien til betinget formatering, der understøtter Excel
2007+-udvidelsesregler. TXLSWorksheet
holder en samling af TCondFormat-poster; hver post dækker
et eller flere celleområder og indeholder en ordnet liste af
TCondFormatRule-objekter, hvor hver regel enten er en ældre
celleværdi-regel eller en CF12 Data Bar / Color Scale / Icon Set-regel.
De fire Sheet.AddCondFormat*-indgangspunkter
(DataBar,
ColorScale2,
ColorScale3,
IconSet)
konstruerer regler af den korrekte undertype. Tilgængelig siden v2.34.0
Enumeration af tærskeltype
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
Enumeration af ikonsæt-familier
type
TXLSIconSetType = (
icsArrows3, icsArrows3Gray, icsFlags3,
icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
icsSymbols3, icsSymbolsUncircled3,
icsArrows4, icsArrows4Gray, icsRedToBlack4,
icsRatings4, icsTrafficLights4,
icsArrows5, icsArrows5Gray,
icsRatings5, icsQuarters5);
De 17 basis-Excel 2007-ikonfamilier. Det numeriske stopantal (3, 4 eller 5) er kodet ind i enum-navnet
Tærskelværdi (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;
Data bar-payload
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;
XLSX-temafarve round-trip (v2.43.0+)
Barfyldningsfarven på en Data Bar-regel og farverne på de enkelte stop
på en Color Scale-regel kan sættes mod et projektmappe-temaindeks
plus en toningsværdi via SetThemeColor(ThemeId, Tint)
i stedet for en fastlåst RGB. XLSX-writer'en udsender
<color theme="N"/>, når Tint er
præcis 0.0, eller <color theme="N" tint="0.5"/>,
når den ikke er nul, hvilket matcher Excels egen "korteste form"-output. Læseren
fortolker begge attributkombinationer og falder tilbage til
RGB-rgb=-stien, når hverken theme eller
tint er til stede. De to tilstande er gensidigt udelukkende
pr. plads; uanset hvilken Set der blev kaldt sidst, vinder den.
IsThemeColor afspejler den aktive tilstand til
inspektion
BIFF8 CF12 gemmer kun den opløste RGB-farve — tematilstand
round-tripper i denne udgivelse udelukkende på XLSX-backenden.
iconSet-regler har ingen <color>-elementer,
så tematilstands-tilføjelsen påvirker dem ikke
Color scale-payload
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;
Icon set-payload
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;
Per-stop ikonoverride (v2.44.0+)
Hvert stop i en Icon Set-regel kan overskrive sit viste ikon
med ethvert ikon fra en af de 17 indbyggede ikonfamilier,
identificeret ved et (OverrideSet, IconId)-par. XLSX udsender
<cfIcon iconSet="..." iconId="N"/> pr.
overskrevet stop. BIFF8 CF12 fortsætter med at gengive
familie-standardikonet, fordi BIFF8-wireformatet ikke har nogen plads
til per-stop-overskrivelse — dette er en XLSX-only-funktion i
den aktuelle udgivelse. HasIconOverride[i] returnerer
kun True for stop, der eksplicit er valgt til via
SetIconOverride; stop med standardikon fortsætter med at
bruge familiens stoppositions-standard
Regel
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;
Præcis én af DataBar / ColorScale /
IconSet er ikke-nil pr. CF12-regel, hvilket matcher regelens
Kind. Ældre cellIs-regler (ikke-CF12) lader alle tre være nil
og bruger Operator_ + Formula1 / Formula2
Egenskaben Style (v2.35.0+) oprettes lazy ved første
læsning; det returnerede objekt ejes af reglen og frigøres i dens
destruktor. Sæt HasXxx via det tilsvarende
SetXxx-kald på Style. BIFF8-læseren
beholder de rå bytes i DxfBlob ud over at afkode
dem til Style (v2.35.1+), så en load-edit-save round-trip
afspejler enhver post-load-mutation af Style; hvis brugeren
ikke rører den, bærer den gemte fil de samme overskrivelser som
originalen
På BIFF8-CF12 Data Bar-, Color Scale- og Icon Set-regler
kræver [MS-XLS], at den inline DXF-blok er tom. Fra og med
v2.87.4 følger HotXLS denne regel: stiloverskrivelser tildelt gennem
Rule.Style serialiseres ikke for disse tre CF12-typer,
når der gemmes .xls-filer. Selve Data Bar / Color Scale / Icon Set-regel-
konfigurationen bevares stadig gennem den CF12-type-specifikke
hale. XLSX-output for betinget formatering påvirkes ikke
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;
Krydsversions-skyggedetektion (v2.37.0+)
Excel-gemte filer bærer ofte både en Excel 2003-celleværdi-
CONDFMT og en Excel 2007+-CONDFMT12,
der dækker det samme sqref — celleværdi-posten er en
krydsversions-fallback, som ældre Excel stadig kan gengive. Læseren
markerer den ældre post via IsShadowed = True
efter at have registreret et præcist bounding-box-match på
TotalRange, så brugerorienteret kode, der itererer
samlingen af betinget formatering, kan springe duplikatet over. Writer'en
fortsætter med at udsende begge postfamilier ved gemning for Excel 2003
↔ Excel 2007+-kompatibilitet
Wire-format
Ved BIFF8-SaveAs(xlExcel97) udsender CF12-regler
CONDFMT12 ($0879) + CF12 ($087A)-
poster sammen med de ældre CONDFMT ($01B0) +
CF ($01B1) for krydsversions-kompatibilitet med Excel
2003. Læseren genkender de moderne poster og viser dem gennem
den samme in-memory-regelmodel, så Excel-forfattede .xls-filer med
udvidelsesregler round-tripper uden datatab
Eksempel
// 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;
Se også
TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (XLSX-siden)