مستندات HotXLS

TCondFormat / TCondFormatRule و کلاس‌های spec CF12

واحد: 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-set family enumeration

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) در نام enum کد می‌شود

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 (v2.43.0+)

رنگ پرشدن نوار داده در یک قانون Data Bar و رنگ‌های هر توقف در یک قانون Color Scale را می‌توان با استفاده از شاخص تم کتاب‌کار به‌همراه مقدار tint از طریق SetThemeColor(ThemeId, Tint) به‌جای RGB ثابت تنظیم کرد. نویسنده XLSX وقتی Tint دقیقاً 0.0 باشد <color theme="N"/> صادر می‌کند یا وقتی مقدار غیرصفر باشد <color theme="N" tint="0.5"/>، مطابق با خروجی «کوتاه‌ترین فرم» خود Excel. خواننده هر دو ترکیب ویژگی را تجزیه می‌کند و وقتی نه theme و نه tint وجود ندارد، به مسیر RGB rgb= برمی‌گردد. دو حالت برای هر slot متقابلاً انحصاری هستند؛ هر کدام از Set که آخرین‌بار فراخوانی شده باشد برنده می‌شود و IsThemeColor حالت فعال را برای بررسی نشان می‌دهد

CF12 در BIFF8 فقط RGB حل‌شده را ذخیره می‌کند — حالت تم در این نسخه فقط روی backend XLSX رفت‌وبرگشت می‌شود قوانین iconSet هیچ عنصر <color> ندارند، بنابراین افزودن حالت تم روی آن‌ها اثری ندارد

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;

لغو آیکونِ هر توقف (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) هر سه را تهی می‌گذارند و از Operator_ به‌همراه Formula1 / Formula2 استفاده می‌کنند

ویژگی Style (v2.35.0+) هنگام نخستین خواندن به‌صورت تنبل ایجاد می‌شود؛ شیء برگشتی مالکیتش با خود قانون است و در مخرب آن آزاد می‌شود. از طریق فراخوانی متناظر SetXxx روی Style، HasXxx را تنظیم کنید. خواننده BIFF8 در کنار رمزگشایی به Style، بایت‌های خام را در DxfBlob هم نگه می‌دارد (v2.35.1+)، بنابراین رفت‌وبرگشت load-edit-save هر تغییری را که پس از بارگذاری در Style اعمال شده باشد منعکس می‌کند؛ اگر کاربر به آن دست نزند، فایل ذخیره‌شده همان overrides فایل اصلی را حمل می‌کند

در قوانین Data Bar، Color Scale و Icon Setِ CF12 روی BIFF8، [MS-XLS] می‌خواهد بلوک DXF درون‌خطی خالی باشد. از v2.87.4، HotXLS همین قاعده را دنبال می‌کند: overrideهای سبک که از طریق Rule.Style اختصاص داده می‌شوند، هنگام ذخیره فایل‌های .xls برای آن سه نوع CF12 سریال‌سازی نمی‌شوند. پیکربندی خود قانون Data Bar / Color Scale / Icon Set همچنان از طریق tail مخصوص نوع 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-نسخه shadow detection (v2.37.0+)

فایل‌های ذخیره‌شده توسط Excel اغلب هم یک CONDFMT مقدار سلول Excel 2003 و هم یک CONDFMT12 Excel 2007+ را که همان sqref را پوشش می‌دهند، همراه دارند — رکورد مقدار سلول یک fallback میان‌نسلی است که Excel قدیمی‌تر هنوز می‌تواند رندر کند. خواننده پس از تشخیص یک تطابق دقیق باکس مرزی روی TotalRange، ورودی قدیمی‌تر را با IsShadowed = True علامت می‌زند، بنابراین کدی که از دید کاربر مجموعه قالب‌بندی شرطی را پیمایش می‌کند می‌تواند نسخه تکراری را نادیده بگیرد. نویسنده همچنان هر دو خانواده رکورد را هنگام ذخیره برای سازگاری Excel 2003 ↔ Excel 2007+ صادر می‌کند

Wire format

در SaveAs(xlExcel97) روی BIFF8، قوانین 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)