עיצוב מותנה ב-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