HotXLS, ספריית גיליונות אלקטרוניים נייטיבית עבור Delphi ו-C++Builder, תומכת בייצוא גיליונות לפורמטים מרובים מעבר ל-XLS ול-XLSX. ארבעת הנתיבים שמרוויחים מתשומת לב מיוחדת הם CSV, HTML, RTF, וייבוא CSV שמשנה דברים בצורה בלתי צפויה
ייצוא CSV: ציטוט RFC 4180, BOM ומפריד
SaveAsCSV כותב UTF-8 עם BOM, סיומות CRLF וציטוט RFC 4180: שדות המכילים פסיקים, גרשיים או סיומות שורה מוקפות בגרשיים כפולים, וגרשיים כפולים בתוך שדה מכופלים. המפריד ניתן לשינוי: ניתן לציין טאב עבור TSV. מלכודת הנוסחאות: SaveAsCSV כותב נוסחאות כטקסט מילולי, לא כערך מחושב. אם הצרכן מצפה למספרים, הפעל Calculate לפני הייצוא, או ייצא מחוברת שכבר מכילה תוצאות מחושבות
ייצוא HTML: WriteDocument, TableClass וקוד חזרה
SaveAsHTML מייצר טבלת HTML יחידה. ניתן להגדיר את TableClass כדי להוסיף class name לאלמנט <table> לצורך עיצוב CSS. מיזוגי תאים מיוצגים ב-colspan ו-rowspan. קוד החזרה חריג: בשונה מרוב קריאות HotXLS שמחזירות 1 להצלחה, SaveAsHTML מחזיר 0 להצלחה ו--1 לשגיאה. בדוק = 0, לא = 1
מגבלות ייצוא RTF
ייצוא RTF אפשרי אך עם מגבלה חדה: לא ניתן לפרוס תאים ממוזגים מעבר לעמודות בפורמט RTF. תאי ההמשך של מיזוג יוצאים ריקים. דוחות עם מיזוגי עמודות מורכבים אינם מתאימים לייצוא RTF — שקול HTML במקום
ייבוא CSV: פעולה הרסנית
Open עם קובץ CSV מחליף את כל תוכן הגיליון הנוכחי בנתוני ה-CSV. אם אתה פותח CSV לתוך חוברת קיימת עם נתונים, הנתונים הקיימים יאבדו ללא אזהרה. תמיד צור TXLSXWorkbook חדש לפני ייבוא CSV
Stream overloads
שתי משפחות HotXLS תומכות ב-TStream overloads לכל פעולות ה-IO הנפוצות — Open, SaveAs, SaveAsCSV, SaveAsHTML ו-SaveAsODS. זה מאפשר לעבוד ישירות עם blob storage או HTTP response ללא כתיבה לדיסק. שים לב: לאחר SaveAs(Stream) ה-stream position אינו מאופס — הגדר Stream.Position := 0 בעצמך לפני קריאה מה-stream
HotXLS קומפל לתוך אפליקציית Delphi או C++Builder ללא תלויות חיצוניות; מהדורות ורישוי זמינים בדף HotXLS Component
דוגמאות קוד נוספות
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
R: Integer;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('invoice-run.xlsx');
Sheet := Book.Sheets[0];
// Materialize formula results so the CSV carries numbers, not '=...' text
for R := 2 to 41 do
if Sheet.Cells[R, 4].Formula <> '' then
Sheet.Cells[R, 4].Value := Book.Calculate(Sheet.Cells[R, 4].Formula);
Book.SaveAsCSV('feed.csv', 0, ','); // sheet 0, comma
Book.SaveAsCSV('feed.tsv', 0, #9); // same sheet as TSV
finally
Book.Free;
end;
end;var
Opts: TXLSXHtmlExportOptions;
begin
Opts := TXLSXHtmlExportOptions.Create;
try
Opts.Title := 'Weekly settlement';
Opts.TableClass := 'report-grid'; // hook for the host page stylesheet
Opts.WriteDocument := True; // full page, not a fragment
if Book.SaveAsHTML('settlement.html', 0, Opts) <> 0 then
raise Exception.Create('Sheet index out of range');
finally
Opts.Free;
end;
end;