ב-HotXLS, ספריית גיליונות האלקטרוניים הנייטיבית של losLab עבור Delphi ו-C++Builder, גרפיקה ואובייקטי ציור מטופלים שונה בין שתי המשפחות. שמיים הקונטיינרים עצמם: XLS ו-XLSX
שתי משפחות קונטיינר, שתי מערכות ציור
ב-XLSX, תרשימים ותמונות חיים בשכבת DrawingML שמוגדרת ב-ECMA-376. ב-XLS הם שוכנים ב-OfficeArt, המבנה הבינארי הישן של BIFF8. שתי המשפחות חושפות ממשק API מסודר, אבל הנתונים הבסיסיים שונים, וחשוב לזכור זאת בעת מעבר בין פורמטים
הטמעת תרשים ב-XLSX
בצד XLSX, TXLSXWorkbook חושף אוסף Charts על כל גיליון. כל תרשים מוטמע מוחזק בתוך TXLSXChart עם שדות לטווח הנתונים, סוג התרשים ועוגן ה-DrawingML שלו. אפשר לאחזר, לבדוק ולכתוב את הנתונים הללו, אך לא ליצור תרשים מאפס: HotXLS משמר אובייקטי תרשים קיימים אך אינו כולל מנוע בנייה של תרשימים
תמונות ב-XLSX: מידות EMU
תמונות ב-XLSX נמדדות ב-EMU — יחידות מטרה אנגליות. יחידה אחת EMU שווה ל-1/914400 אינץ'. TXLSXPicture חושף WidthEmu ו-HeightEmu יחד עם הנתונים הבינאריים של התמונה. כדי לחשב פיקסלים ל-EMU השתמש ב-Round(Pixels * 914400 / DPI). עבור תמונות ברזולוציית 96 DPI, פיקסל אחד שווה בערך 9525 EMU. אם תציין מימדים שגויים, התמונה תשתרע מעבר לגבולות התא בעת פתיחה ב-Excel
גיליונות תרשים וצורות ב-XLS
בצד XLS, תרשימים יושבים על גיליונות תרשים ייעודיים, לא מוטמעים בגיליון עבודה. IXLSWorkbook.Sheets מחזיר גם גיליונות עבודה וגם גיליונות תרשים; השתמש ב-IXLSSheet.SheetType כדי להבחין ביניהם. צורות מוחזקות ב-IXLSSheet.Shapes, וניתן לאחזר אותן ע"י index. OfficeArt blob עוברת round-trip שלמה: HotXLS קורא ושומר אותה ללא שינוי, ולכן עריכה ושמירה ב-XLS לא תאבד גרפיקה
צבעי נושא
שני הפורמטים תומכים בצבעי נושא. ב-XLSX, TXLSXTheme מחשוף 12 צבעי נושא כ-RGB values. ב-XLS, צבעי הפלטה מאוחסנים ב-IXLSWorkbook.ColorPalette. כאשר אתה מעביר קובץ מ-XLS ל-XLSX ע"י SaveXLSWorkbookAsXLSX, צבעי הנושא עשויים להשתנות כי שתי המערכות אינן זהות
יציבות עוגנים
ב-XLSX, כל תמונה ותרשים מעוגנים לתא דרך TwoCellAnchor או OneCellAnchor. כאשר InsertRows פועל מעל הגרפיקה, DrawingML מעדכן את מיקום העוגן אוטומטית. ב-XLS, OfficeArt shapes מעוגנות ל-row/column coordinates בינאריות שאינן מעודכנות ע"י InsertRows, ולכן אם אתה מוסיף שורות מעל תמונות ב-XLS, תצטרך לעדכן את מיקומן ידנית
HotXLS קומפל לתוך שירות Delphi או C++Builder שלך ללא תלויות חיצוניות; מהדורות ורישוי זמינים בדף HotXLS Component
דוגמאות קוד נוספות
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Chart: TXLSXChart;
begin
Book := TXLSXWorkbook.Create;
try
Sheet := Book.Sheets.Add('Sales');
Sheet.Cells[1, 1].Value := 'Region';
Sheet.Cells[1, 2].Value := 'Revenue';
Sheet.Cells[2, 1].Value := 'East';
Sheet.Cells[2, 2].Value := 1184350;
Sheet.Cells[3, 1].Value := 'Central';
Sheet.Cells[3, 2].Value := 902210;
Sheet.Cells[4, 1].Value := 'West';
Sheet.Cells[4, 2].Value := 1010675;
// Frame anchored to rows 6..22, columns 1..8
Chart := Sheet.AddChart(xlsxChartColumn, 'Revenue by Region', 6, 1, 22, 8);
Chart.AddSeries('Revenue', 'Sales!$A$2:$A$4', 'Sales!$B$2:$B$4');
Chart.ValueAxisTitle := 'USD';
Sheet.AddImageFromFile(1, 5, 'logo.png');
Book.SaveAs('dashboard.xlsx');
finally
Book.Free;
end;
end;var
Book: IXLSWorkbook;
Data, Trend: IXLSWorksheet;
Series: array[0..0] of TXLSChartSeriesInfo;
begin
Book := TXLSWorkbook.Create; // interface-counted: do not Free
Data := Book.Sheets.Add;
Data.Name := 'Data';
Data.Cells.Item[1, 1].Value := 'Month';
Data.Cells.Item[1, 2].Value := 'Units';
Data.Cells.Item[2, 1].Value := 'Apr';
Data.Cells.Item[2, 2].Value := 1530;
Data.Cells.Item[3, 1].Value := 'May';
Data.Cells.Item[3, 2].Value := 1721;
Series[0].Name := 'Units';
Series[0].Categories := 'Data!$A$2:$A$3';
Series[0].Values := 'Data!$B$2:$B$3';
Trend := Book.Sheets.AddChartSheet('Trend', xlsChartTypeLine,
'Units sold', 'Month', 'Units', Series);
// Trend is a chart substream: never call cell methods on it
Data.Shapes.AddTextBox('Source: ERP nightly export', 6, 1, 8, 4);
Data.Shapes.AddPicture('approved-stamp.bmp');
Book.SaveAs('trend.xls');
end;