מאמר טכני

עיצוב מותנה וטקסט עשיר ב-HotXLS עבור Delphi

עיצוב מותנה ב-XLSX ב-HotXLS מאפשר לקבוע כיצד ייראו תאים בהתבסס על ערכיהם, ללא צורך לשנות את הסגנון הבסיסי של כל תא. HotXLS, ספריית גיליונות אלקטרוניים נייטיבית עבור Delphi ו-C++Builder, חושפת API מלא לעיצוב מותנה ולטקסט עשיר

כללי cellIs וסגנוני dxf

הסוג הנפוץ ביותר של כלל עיצוב מותנה הוא כלל cellIs — "עצב תא אם ערכו גדול מ-X" וכדומה. בצד XLSX, כל כלל מחזיק TXLSXConditionalFormat עם Type, Operator, Formula1 ו-Formula2. הסגנון המוחל מוגדר כ-dxf — שינוי חלקי מהסגנון הקיים. DxfFill, DxfFont ו-DxfBorder הם הנכסים הנפוצים. בצד XLS, HotXLS תומך בתת-קבוצה של 4 כללים בלבד לגיליון, בהתאם למגבלת BIFF8

סרגלי נתונים, ערכות סמלים וסולמות צבע

שלושת הסוגים הנוספים תומכים ב-XLSX בלבד: סרגלי נתונים (dataBar) מציגים ייצוג חזותי יחסי, ערכות סמלים (iconSet) מציגות סמלים מ-4 ערכות, וסולמות צבע (colorScale) מגדירים גרדיאנט לפי טווח ערכים. HotXLS קורא ומשמר את שלושתם; ניתן גם לכתוב אותם ישירות

עדיפות כללים וצבירה

כשמספר כללים חלים על אותו תא, Excel מיישם אותם לפי עדיפות — מספר עדיפות נמוך יותר אומר עדיפות גבוהה יותר. TXLSXConditionalFormatRule.Priority קובע את הסדר. הדגל StopIfTrue עוצר את החלת כללים נוספים ברגע שהכלל הנוכחי מתקיים

טקסט עשיר: בעלות על runs ומלכודת ColorIsAuto

טקסט עשיר ב-HotXLS מאוחסן כ-TXLSXRichText עם אוסף של TXLSXRichTextRun. כל run מחזיק segment טקסט ואת הגדרות הגופן שלו. מלכודת ColorIsAuto: אם אינך מגדיר צבע מפורש ב-run, הנכס ColorIsAuto מוגדר כ-True ו-Excel מפרש זאת כ"ירש מסגנון התא". אם תשמור ב-False ותשכח לקבוע צבע, התוצאה היא שחור מוצק ללא קשר לנושא הגיליון. תמיד הגדר ColorIsAuto := True כשאתה רוצה שהצבע יירש, או קבע ערך RGB מפורש

off-by-one בנגישות לבריכת סגנונות

בריכת הסגנונות ב-XLSX היא 0-based בנקודת ה-Add (הפניית ה-index שמוחזרת מ-Fonts.Add), אך 1-based בנקודת השיוך לתא (Cell.FontIndex). הוסף 1 לכל index שמוחזר מ-Add לפני שאתה מציב אותו בתא, אחרת התא יאמץ סגנון שונה. אין שגיאה — index שגוי בבריכת הסגנונות הוא עדיין index תקין, והתא פשוט מציג את הסגנון הלא-נכון בשקט

HotXLS קומפל לתוך אפליקציית Delphi או C++Builder ללא תלויות חיצוניות; מהדורות ורישוי זמינים בדף HotXLS Component

דוגמאות קוד נוספות

var
  Book: TXLSXWorkbook;
  Sheet: TXLSXWorksheet;
  Idx: Integer;
begin
  Book := TXLSXWorkbook.Create;
  try
    Book.Open('kpi.xlsx');
    Sheet := Book.Sheets[0];

    // Negative variance: light red fill
    Idx := Sheet.AddConditionalFormat('D2:D200', xlsxCfOpLessThan, '0');
    Sheet.ConditionalFormats[Idx].Style.SetFillBgColor($FFFFC7CE);

    // Duplicate order IDs get flagged the same way
    Idx := Sheet.AddCondFormatDuplicateValues('A2:A200');
    Sheet.ConditionalFormats[Idx].Style.SetFillBgColor($FFFFEB9C);

    // Custom formula rule: highlight rows where actual misses 90% of target
    Idx := Sheet.AddCondFormatExpression('B2:B200', '$C2<$B2*0.9');
    Sheet.ConditionalFormats[Idx].Style.SetFillBgColor($FFFFC7CE);

    Book.SaveAs('kpi-flagged.xlsx');
  finally
    Book.Free;
  end;
end;
var
  Rich: TXLSXRichText;
  Run: TXLSXRichTextRun;
begin
  Rich := TXLSXRichText.Create;
  Rich.AddRunText('Status: ');
  Run := Rich.AddRunText('OVERDUE');
  Run.Bold := True;
  Run.Color := $FFC00000;
  Run.ColorIsAuto := False;
  Run := Rich.AddRunText(' (escalated to regional manager)');
  Run.Italic := True;
  Sheet.Cells[2, 7].RichText := Rich;   // ownership moves to the cell: do not Free
end;
HeaderFont := Book.Fonts.Add('Calibri', 11, True, False);  // pool index, 0-based
for Col := 1 to 6 do
  Sheet.Cells[1, Col].FontIndex := HeaderFont + 1;          // cell index, 1-based