הערות תאים וקישורים מייצגות שני שכבות בחוברות Excel שקוד אוטומטי לרוב מתעלם מהן: הערות מכילות הקשר שנכתב על ידי בני אדם, וקישורים מחברים נתונים למקורות שכתובתם עשויה להשתנות. HotXLS, ספריית גיליונות אלקטרוניים נייטיבית עבור Delphi ו-C++Builder, חושפת את שתיהן ב-API מסודר דרך שתי משפחות הקלאסים שלה
קריאה וכתיבה של הערות תאים
ב-XLSX, כל הערה מוחזקת ב-TXLSXComment עם Author, Text ותיאור עוגן. אוסף ה-Comments של הגיליון מחזיר את כל ההערות, וניתן להוסיף אחת ע"י Sheet.Comments.Add(Row, Col, Author, Text). שם המחבר מוצג ב-Excel ומועיל לבקורת — קוד שכותב הערות צריך להגדיר שם מחבר משמעותי
ב-XLS, הערות מוחזקות ב-IXLSSheet.Comments וניתן לגשת אליהן לפי index או תא. FindAt(Row, Col) מחזיר nil אם אין הערה בתא הנתון — תמיד בדוק את הערך המוחזר לפני גישה לשדות של ההערה
קישורים חיצוניים לעומת קפיצות בתוך-חוברת
HotXLS מבחין בין שני סוגי קישורים: קישורים חיצוניים (URL) המצביעים לאינטרנט או מסמכים אחרים, וקישורים פנימיים המכוונים לאזור בחוברת עצמה. ב-XLSX, אוסף Hyperlinks של הגיליון מחזיר TXLSXHyperlink עם Address לקישור חיצוני ו-Location לייחוס פנימי — שני ה-API שונים ואינם ניתנים להחלפה. ב-XLS, קישורים חיצוניים מוחזקים ב-IXLSSheet.Hyperlinks ואילו קפיצות פנימיות נשמרות כ-HLINK records עם target שמתחיל ב-#
מלכודת FindAt
FindAt ב-XLS מחזיר ממשק ההערה לתא נתון, או nil אם אין הערה שם. קוד שאינו בודק nil יקרוס עם AV בקריאה מחוברת שאין לה הערות בכל תא. תמיד עטוף קריאות FindAt בבדיקת if Comment <> nil then לפני גישה לשדות
כתובות URL חיצוניות: אימות לפני מסירה
HotXLS אינו מאמת קישורים בזמן שמירה. כתובת URL שהשתנתה תישמר ללא אזהרה. בקורת לפני מסירה צריכה לסרוק את כל הקישורים ולאמת כי כתובות ה-URL עדיין נגישות. לכלי זה, לולאה על Sheet.Hyperlinks עם בדיקת Address מספקת רשימת ביקורת מלאה
גיליון אינדקס לבקורת
גיליון אינדקס שמרכז הערות וקישורים מגיליונות שונים עוזר לצוות לסקור שינויים. לולאה על Book.Sheets, ואז על Sheet.Comments ו-Sheet.Hyperlinks, מאפשרת לבנות רשימת ממצאים עם הפניות לתאים. לפני מסירה בדוק: האם כל הקישורים החיצוניים מצביעים לדומיינים מאושרים, האם הערות הכוללות נתונים רגישים הוסרו, ואם שמות המחברים בהערות משקפים את הצוות הנכון
HotXLS קומפל לתוך אפליקציית Delphi או C++Builder ללא תלויות חיצוניות; מהדורות ורישוי זמינים בדף HotXLS Component
דוגמאות קוד נוספות
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Note: TXLSXComment;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('reconciliation.xlsx');
Sheet := Book.Sheets[0];
// Authored note on the adjusted figure
Sheet.AddComment(14, 4, 'Manual adjustment: late FX rate, see ticket FIN-2214',
'recon-service');
// Update an existing note instead of stacking a second one
Note := Sheet.Comments.FindAt(14, 4);
if Note <> nil then
Note.Text := Note.Text + ' [verified 2026-06-11]';
Book.SaveAs('reconciliation-reviewed.xlsx');
finally
Book.Free;
end;
end;Sheet.Cells[2, 1].Value := 'Source record';
Sheet.AddHyperlink(2, 1, 'https://intranet.example.com/records/2214',
'Open record 2214', 'ERP source entry');
Sheet.Cells[3, 1].Value := 'Totals';
Sheet.AddHyperlinkToCell(3, 1, 'Overview!B12', 'Jump to totals');var
Book: IXLSWorkbook;
Sheet: IXLSWorksheet;
Remark: TXLSComment;
begin
Book := TXLSWorkbook.Create;
Sheet := Book.Sheets.Add;
Sheet.Name := 'Review';
Sheet.Cells.Item[5, 2].Value := 4821.50;
Remark := Sheet.Cells.Item[5, 2].AddComment('Awaiting sign-off from controller');
Remark.Visible := True; // pop the note open on first view
Sheet.AddHyperlink(7, 2, 'https://intranet.example.com/signoff/4821',
'Sign-off form', 'Opens the controller queue');
Book.SaveAs('review.xls');
end;