TCondFormat / TCondFormatRule y clases de especificación CF12
Unidad: lxCondFormat
La familia de formato condicional BIFF8 (.xls) compatible con las reglas de extensión de Excel 2007+. TXLSWorksheet mantiene una colección de entradas TCondFormat; cada entrada abarca uno o varios rangos de celdas y contiene una lista ordenada de objetos TCondFormatRule, siendo cada regla una regla heredada de valor de celda o una regla CF12 de barra de datos / escala de colores / conjunto de iconos. Los cuatro puntos de entrada Sheet.AddCondFormat* (DataBar, ColorScale2, ColorScale3, IconSet) construyen reglas del subtipo correcto. Disponible desde v2.34.0
Enumeración de tipo de umbral
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
Enumeración de familia de conjunto de iconos
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, o 5) es encoded en el enum nombre
Valor de umbral (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;
Carga de barra de datos
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 tema color ida y vuelta (v2.43.0+)
El color de relleno de barra de una regla Data Bar y los colores de cada punto de una regla Color Scale se pueden establecer frente a un índice de tema del libro más un valor de matiz mediante SetThemeColor(ThemeId, Tint) en lugar de un RGB fijo. El escritor XLSX emite <color theme="N"/> cuando Tint es exactamente 0.0 o <color theme="N" tint="0.5"/> cuando es distinto de cero, igual que la salida de "forma más breve" de Excel. El lector analiza ambas combinaciones de atributos y recurre a la ruta RGB rgb= cuando no está presente ni theme ni tint. Los dos modos son excluyentes por ranura; gana la última llamada a Set IsThemeColor refleja el modo activo para inspección
BIFF8 CF12 almacena solo el color RGB resuelto — el modo tema se conserva de ida y vuelta exclusivamente en el backend XLSX en esta versión iconSet no tiene elementos <color>, así que la adición del modo tema no les afecta
Carga de escala de 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;
Carga de conjunto de iconos
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;
Anulación de icono por punto (v2.44.0+)
Cada punto de un conjunto de iconos puede sustituir su icono mostrado por cualquier icono de cualquiera de las 17 familias de iconos integradas, identificado por un par (OverrideSet, IconId). XLSX emite <cfIcon iconSet="..." iconId="N"/> por cada punto sustituido. BIFF8 CF12 sigue representando el icono predeterminado de la familia porque el formato de cable BIFF8 no tiene una ranura para sustituciones por punto — esta es una capacidad exclusiva de XLSX en la versión actual. HasIconOverride[i] devuelve True solo para los puntos que se han activado explícitamente mediante SetIconOverride; los puntos con icono predeterminado siguen usando el valor predeterminado de la posición del punto de la familia
Regla
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;
Solo uno de DataBar / ColorScale / IconSet es no nulo por cada regla CF12, en línea con Kind de la regla. Las reglas heredadas cellIs (no CF12) dejan los tres en nil y usan Operator_ + Formula1 / Formula2
La propiedad Style (v2.35.0+) se crea perezosamente en la primera lectura; el objeto devuelto pertenece a la regla y se libera en su destructor. Define HasXxx mediante la llamada SetXxx correspondiente en Style. El lector BIFF8 conserva los bytes sin procesar en DxfBlob además de decodificarlos en Style (v2.35.1+), de modo que un ciclo cargar-editar-guardar refleja cualquier mutación posterior a la carga de Style; si el usuario no lo toca, el archivo guardado lleva las mismas sustituciones que el original
En las reglas BIFF8 CF12 Data Bar, Color Scale e Icon Set, [MS-XLS] exige que el bloque DXF en línea esté vacío. A partir de v2.87.4, HotXLS sigue esa regla: las sustituciones de estilo asignadas mediante Rule.Style no se serializan para esos tres tipos CF12 al guardar archivos .xls. La propia configuración de la regla Data Bar / Color Scale / Icon Set sigue conservándose a través de la cola específica del tipo CF12. La salida de formato condicional XLSX no se ve afectada
Contenedor
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+)
Los archivos guardados por Excel suelen llevar tanto un CONDFMT de valor de celda de Excel 2003 como un CONDFMT12 de Excel 2007+ que cubren el mismo sqref — el registro de valor de celda es una alternativa entre versiones que el Excel antiguo todavía puede representar. El lector marca la entrada antigua con IsShadowed = True tras detectar una coincidencia exacta de caja delimitadora en TotalRange, de modo que el código de cara al usuario que recorre la colección de formato condicional pueda saltarse el duplicado. El escritor sigue emitiendo ambas familias de registros al guardar para compatibilidad entre Excel 2003 ↔ Excel 2007+
Formato de cable
En BIFF8 SaveAs(xlExcel97), las reglas CF12 emiten registros CONDFMT12 ($0879) + CF12 ($087A) junto con los CONDFMT ($01B0) + CF ($01B1) heredados para compatibilidad entre versiones con Excel 2003. El lector reconoce los registros modernos y los expone mediante el mismo modelo de reglas en memoria, de modo que los archivos .xls creados por Excel con reglas de extensión se conservan de ida y vuelta sin pérdida de datos
Ejemplo
// 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;
Véase también
TXLSWorksheet.AddCondFormatDataBar
TXLSWorksheet.AddCondFormatColorScale2
TXLSWorksheet.AddCondFormatColorScale3
TXLSWorksheet.AddCondFormatIconSet
TXLSXConditionalFormat (lado XLSX)