Класс 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
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-задать family enumeration
type
TXLSIconSetType = (
icsArrows3, icsArrows3Gray, icsFlags3,
icsTrafficLights3, icsTrafficLightsRimmed3, icsSigns3,
icsSymbols3, icsSymbolsUncircled3,
icsArrows4, icsArrows4Gray, icsRedToBlack4,
icsRatings4, icsTrafficLights4,
icsArrows5, icsArrows5Gray,
icsRatings5, icsQuarters5);
17 baseline Excel 2007 icon families. numeric stop count (3, 4, или 5) является encoded в enum имя
Threshold значение (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 и цвета каждого стопа в правиле шкалы цветов можно задавать по индексу темы книги плюс значению оттенка через 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 iconSet rules have no <color> elements so the theme-mode addition does not affect them
цвет 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 задать 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;
Переопределение значка для каждого стопа (v2.44.0+)
Каждый стоп в правиле Icon Set может переопределять отображаемый значок любым значком из любого из 17 встроенных семейств значков, определяемым парой (OverrideSet, IconId). XLSX выводит <cfIcon iconSet="..." iconId="N"/> для каждого переопределённого стопа. BIFF8 CF12 по-прежнему отображает значок по умолчанию семейства, потому что в формате BIFF8 нет слота для переопределения по каждому стопу — в текущем выпуске это возможность только для XLSX. HasIconOverride[i] возвращает True только для стопов, которые явно включены через SetIconOverride; стопы с иконкой по умолчанию по-прежнему используют значение по умолчанию для позиции стопа семейства
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;
Для каждого правила CF12 ненулевым бывает ровно один из DataBar / ColorScale / IconSet, что соответствует Kind правила. Устаревшие правила cellIs (не CF12) оставляют все три nil и используют Operator_ + Formula1 / Formula2
Свойство Style (v2.35.0+) создаётся лениво при первом чтении; возвращаемый объект принадлежит правилу и освобождается в его деструкторе. Устанавливайте HasXxx через соответствующий вызов SetXxx на Style. Читатель BIFF8 сохраняет сырые байты в DxfBlob дополнительно к декодированию их в Style (v2.35.1+), так что цикл загрузка-изменение-сохранение отражает любую модификацию Style после загрузки; если пользователь его не трогает, сохранённый файл несёт те же переопределения, что и исходный
Для правил BIFF8 CF12 Data Bar, Color Scale и Icon Set [MS-XLS] требует, чтобы встроенный блок DXF был пустым. Начиная с v2.87.4 HotXLS следует этому правилу: переопределения стиля, назначенные через Rule.Style, не сериализуются для этих трёх видов CF12 при сохранении файлов .xls. Сама конфигурация правил Data Bar / Color Scale / Icon Set по-прежнему сохраняется в видовом хвосте CF12. Вывод условного форматирования XLSX не затрагивается
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 файлы часто содержат и Excel 2003 CONDFMT для значений ячеек, и Excel 2007+ CONDFMT12, охватывающие один и тот же sqref — запись по значениям ячеек служит запасным вариантом между версиями, который старый Excel всё ещё может отрисовать. Читатель помечает старую запись через IsShadowed = True после обнаружения точного совпадения ограничивающего прямоугольника по TotalRange, поэтому пользовательский код, итерирующий коллекцию условных форматов, может пропускать дубликат. Писатель по-прежнему выводит оба семейства записей при сохранении для совместимости Excel 2003 ↔ Excel 2007+
Wire формат
В BIFF8 SaveAs(xlExcel97) правила CF12 выводят записи CONDFMT12 ($0879) + CF12 ($087A) вместе с устаревшими CONDFMT ($01B0) + CF ($01B1) для кросс-версионной совместимости с Excel 2003. Читатель распознаёт современные записи и предоставляет их через ту же внутрипамятную модель правил, так что файлы .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)