TCondFormat / TCondFormatRule en CF12 spec classes
Eenheid: lxCondFormat
De BIFF8 (.xls)-familie voor voorwaardelijke opmaak met ondersteuning voor Excel
2007+-extensieregels. TXLSWorksheet
bijhoudt een collectie TCondFormat-invoeren; elke invoer omvat
een of meer celbereiken en bevat een geordende lijst met
TCondFormatRule objecten, waarbij elke regel ofwel een legacy-
celwaarderegel is ofwel een CF12 Data Bar / Color Scale / Icon Set-regel
De vier Sheet.AddCondFormat*-ingangspunten
(DataBar,
ColorScale2,
ColorScale3,
IconSet)
construct rules of the correct subtype. Available since 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
Icon-set family enumeration
type
TXLSIconSetType = (
icsArrows3, icsArrows3Gray, icsFlags3,
icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
icsSymbols3, icsSymbolsUncircled3,
icsArrows4, icsArrows4Gray, icsRedToBlack4,
icsRatings4, icsTrafficLights4,
icsArrows5, icsArrows5Gray,
icsRatings5, icsQuarters5);
The 17 baseline Excel 2007 icon families. The numeric stop count (3, 4, of 5) is encoded in the enum name
Threshold value (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 theme color round-trip (v2.43.0+)
De staafvulkleur van een Data Bar-regel en de per-stop-kleuren
van een Color Scale-regel kunnen worden ingesteld op een werkmapthemaindex
plus een tintwaarde via SetThemeColor(ThemeId, Tint)
instead of a frozen RGB. The XLSX writer emits
<color theme="N"/> when Tint is
exactly 0.0 of <color theme="N" tint="0.5"/>
when non-zero, matching Excel's own "shortest form" output. The
reader parses both attribute combinations en falls back to the
RGB rgb= path when neither theme nor
tint is present. Two modes are mutually exclusive
per slot; whichever Set was called last wins
IsThemeColor reflects the active mode for
inspection
BIFF8 CF12 slaat alleen de herleide RGB-kleur op — themamodus round-tript in deze release uitsluitend op de XLSX-backend
iconSet rules have no <color>
elements so the theme-mode addition does not affect them
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 icon override (v2.44.0+)
Elke stop in een Icon Set-regel kan zijn weergavepictogram overschrijven
met elk pictogram uit elk van de 17 ingebouwde pictogramfamilies,
geïdentificeerd door een paar (OverrideSet, IconId). XLSX schrijft
<cfIcon iconSet="..." iconId="N"/> uit per
gewijzigde stop. BIFF8 CF12 blijft het
familie-standaardpictogram tekenen omdat het BIFF8-wireformat geen plek
heeft voor override per stop — this is an XLSX-only capability in
the current release. HasIconOverride[i] returns
True only for stops that have been explicitly opted in via
SetIconOverride; de default-icon-stops gebruiken gewoon
de standaardstoppositie van de familie
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;
Exactly one of DataBar / ColorScale /
IconSet is non-nil per CF12 rule, matching the rule's
Kind. Legacy cellIs rules (non-CF12) leave all three nil
en use Operator_ + Formula1 / Formula2
De Style-eigenschap (v2.35.0+) wordt pas bij de eerste
lezing luik aangemaakt; het geretourneerde object is eigendom van de regel en wordt in de
destructor vrijgegeven. Stel HasXxx in via de bijbehorende
SetXxx-aanroep op Style. De BIFF8-lezer
bewaart de ruwe bytes in DxfBlob naast het decoderen
them into Style (v2.35.1+), zodat een load-edit-save-roundtrip
elke mutatie na het laden van Style weerspiegelt; als de gebruiker
er niets aan verandert, heeft het opgeslagen bestand dezelfde overrides als het
origineel
Op BIFF8 CF12 Data Bar, Color Scale en Icon Set-regels,
vereist [MS-XLS] dat het inline DXF-blok leeg is. Vanaf
v2.87.4 volgt HotXLS die regel: stijloverrides die via
Rule.Style zijn toegewezen, worden voor die drie CF12-soorten
niet geserialiseerd bij het opslaan van .xls-bestanden. De configuratie van de Data Bar / Color Scale / Icon Set-regel
zelf blijft gewoon bewaard via de CF12-soortspecifieke
staart. Voorwaardelijke-opmaakuitvoer voor XLSX is onaangetast
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-version shadow detection (v2.37.0+)
Excel-saved files often carry both an Excel 2003 cell-value
CONDFMT en an Excel 2007+ CONDFMT12
covering the same sqref — is het celwaarderecord een
cross-version-terugval die oudere Excel nog kan tekenen. De
lezer markeert de oudere regel via IsShadowed = True
after detecting an exact bounding-box match on
TotalRange, zodat aanroepende code die door de
verzameling voorwaardelijke opmaak itereert het duplicaat kan overslaan. De writer
schrijft bij het opslaan beide recordfamilies weg voor Excel 2003
↔ Excel 2007+ compatibility
Wire format
On BIFF8 SaveAs(xlExcel97), CF12 rules emit
CONDFMT12 ($0879) + CF12 ($087A)
records alongside the legacy CONDFMT ($01B0) +
CF ($01B1) for cross-version compatibility with Excel
2003. De lezer herkent de moderne records en stelt ze bloot via
hetzelfde in-memory regelmodel zodat .xls-bestanden van Excel met
extensieregels zonder gegevensverlies heen en weer gaan
Voorbeeld
// 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;
Zie ook
TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (XLSX side)