Клас TCondFormat
Модул: lxCondFormat
Семейството от условно форматиране BIFF8 (.xls), което поддържа разширените правила на Excel 2007+. TXLSWorksheet поддържа колекция от TCondFormat записи; всеки запис обхваща един или повече диапазони клетки и съдържа подреден списък от обекти TCondFormatRule, като всяко правило е или старо правило по стойност на клетка, или CF12 правило Data Bar / Color Scale / Icon Set. Четирите входни точки Sheet.AddCondFormat* (DataBar, ColorScale2, ColorScale3, IconSet) създават правила от правилния подтип. Налична от v2.34.0
Изброяване на видове прагове
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
Изброяване на семейства икони
type
TXLSIconSetType = (
icsArrows3, icsArrows3Gray, icsFlags3,
icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
icsSymbols3, icsSymbolsUncircled3,
icsArrows4, icsArrows4Gray, icsRedToBlack4,
icsRatings4, icsTrafficLights4,
icsArrows5, icsArrows5Gray,
icsRatings5, icsQuarters5);
17-те базови семейства икони на Excel 2007. Броят на точките на спиране (3, 4 или 5) е кодиран в името на изброението
Прагова стойност (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;
Полезен товар за лента с данни
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 (v2.43.0+)
Цветът на запълване на лентата в правило Data Bar и цветовете за всяка точка в правило Color Scale могат да се задават спрямо индекс на тема на работната книга плюс стойност на оттенък чрез SetThemeColor(ThemeId, Tint) вместо фиксиран RGB. Записвачът на XLSX изписва <color theme="N"/>, когато Tint е точно 0.0, или <color theme="N" tint="0.5"/>, когато е ненулев, като съответства на собствения „най-кратък“ изход на Excel. Четецът анализира и двете комбинации атрибути и се връща към RGB пътя rgb=, когато не е налице нито theme, нито tint. Двата режима са взаимно изключващи се за всеки слот; последният извикан Set печели. IsThemeColor отразява активния режим за инспекция
BIFF8 CF12 съхранява само разрешения RGB цвят — режимът тема се прехвърля кръгово единствено в XLSX backend в тази версия. iconSet правилата нямат <color> елементи, така че добавянето на режим тема не ги засяга
Полезен товар за цветова скала
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;
Полезен товар за набор икони
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;
Превишаване на иконата за всяка точка (v2.44.0+)
Всяка точка в правило Icon Set може да замени показваната си икона с която и да е икона от което и да е от 17-те вградени семейства икони, идентифицирана от двойка (OverrideSet, IconId). XLSX изписва <cfIcon iconSet="..." iconId="N"/> за всяка заменена точка. BIFF8 CF12 продължава да изобразява иконата по подразбиране за семейството, защото BIFF8 форматът няма слот за замяна на ниво точка — това е възможност само за XLSX в текущата версия. HasIconOverride[i] връща True само за точки, които изрично са включени чрез SetIconOverride; точките със стандартна икона продължават да използват иконата по подразбиране за съответната позиция
Правило
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;
Точно едно от DataBar / ColorScale / IconSet е non-nil за всяко CF12 правило, съответно на неговия Kind. Старите cellIs правила (не-CF12) оставят и трите nil и използват Operator_ + Formula1 / Formula2
Свойството Style (v2.35.0+) се създава лениво при първо четене; върнатият обект е притежаван от правилото и се освобождава в неговия деструктор. Задайте HasXxx чрез съответното извикване SetXxx върху Style. Четецът за BIFF8 запазва суровите байтове в DxfBlob освен че ги декодира в Style (v2.35.1+), така че цикълът зареждане-редакция-запис отразява всяка последваща след зареждане промяна на Style; ако потребителят не го пипне, записаният файл носи същите overrides като оригинала
В CF12 Data Bar, Color Scale и Icon Set правила на BIFF8 CF12, [MS-XLS] изисква вграденият DXF блок да е празен. От v2.87.4 HotXLS следва това правило: стиловите overrides, зададени чрез Rule.Style, не се сериализират за тези три CF12 вида при запис на .xls файлове. Самата конфигурация на Data Bar / Color Scale / Icon Set правилата все още се запазва чрез специфичната за CF12 опашка. Изходът на XLSX условното форматиране не е засегнат
Контейнер
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-Версия shadow detection (v2.37.0+)
Файловете, записани от Excel, често носят едновременно cell-value CONDFMT от Excel 2003 и CONDFMT12 от Excel 2007+, покриващи същия sqref — по-старият cell-value запис е съвместимостен резерв, който по-старият Excel все още може да изобрази. Четецът маркира по-стария запис чрез IsShadowed = True след откриване на точно съвпадение на обграждащата кутия в TotalRange, така че кодът, насочен към потребителя и който итерира колекцията с условни формати, може да пропусне дубликата. Записвачът продължава да изписва и двете семейства записи при запис за съвместимост между Excel 2003 и Excel 2007+
Wire формат
В BIFF8 SaveAs(xlExcel97), CF12 правилата изписват CONDFMT12 ($0879) + CF12 ($087A) записи заедно със старите CONDFMT ($01B0) + CF ($01B1) за кръстосана съвместимост с Excel 2003. Четецът разпознава модерните записи и ги излага през същия in-memory модел на правила, така че .xls файловете, създадени от Excel и съдържащи разширени правила, да преминават без загуба на данни
Пример
// 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;
Вижте също
TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (страна на XLSX)