أنشئ وحرر وافحص واحسب وصدّر مصنفات Excel مباشرة من كود Delphi أو C++Builder. HotXLS مكتبة جداول Object Pascal أصلية مع المصدر لسير عمل XLS وXLSX، ومناسبة لأدوات سطح المكتب والمهام الدفعية وأنظمة التقارير وتوليد المستندات على الخادم دون أتمتة Microsoft Excel.
هذه المقالة موجّهة إلى developers generating visual Excel reports, dashboards, or template-based workbooks in Delphi. وهي تتعامل مع charts, images, and drawing objects كجزء من هندسة المستندات في بيئة الإنتاج، لا كاستدعاء سريع لمكوّن.
الخطر العملي هو أن visual workbook elements fail when anchors, sheet changes, chart ranges, image DPI, and drawing identifiers are treated as decorative afterthoughts. لذلك يحتاج المسار إلى عقد واضح وتشخيص قابل للملاحظة وملفات اختبار واقعية.
قرارات البنية
Treat drawings as workbook data. chart data range ownership and whether ranges expand with inserted rows / image source, DPI, compression, transparency, and alternate text policy
- chart data range ownership and whether ranges expand with inserted rows
- image source, DPI, compression, transparency, and alternate text policy
- object anchoring behavior when cells resize, hide, or move
- whether existing drawings are preserved, replaced, or regenerated from templates
مسار التنفيذ
Bind visuals to stable ranges and anchors. The order below keeps the workflow reviewable for Delphi and C++Builder teams.
- prepare named ranges or stable addresses before creating chart objects
- normalize image dimensions and compression before insertion
- place drawings with the intended cell anchor and movement behavior
- recalculate or refresh chart ranges after data changes
- open the workbook in the target Excel version and inspect layout at print scale
أدلة التحقق
Visual-output evidence for workbook support. Keep these fields with the output or support record.
- chart type, source range, sheet name, and series count
- image dimensions, DPI, compression mode, anchor cell, and object identifier
- drawing preservation or regeneration decision for each template object
- viewer compatibility notes for Excel, LibreOffice, or downstream conversion
A chart depends on workbook structure
Charts, pictures, and shapes are connected to sheets, cell anchors, relationships, and sometimes formulas. A reliable workflow keeps those relationships stable when rows, columns, templates, or sheet order change.
ملاحظات تنفيذ للإنتاج
اجعل موضوع «HotXLS Component: charts, images, and drawing objects في Delphi» عقد خدمة واضحا حول استدعاءات HotXLS، مع فصل التحقق من الإدخال وكتابة المصنف وفحص الخرج وأدلة الدعم
- حدد مصدر البيانات ونطاقات الخلايا وتنسيق الخرج قبل إنشاء المصنف
- سجل عدد الصفوف والأوراق والتحذيرات ومسار الخرج في سجل دعم قابل للمراجعة
- ضع التفاصيل الخاصة بالتطبيق داخل دوال مساعدة قابلة للاختبار بدلا من نشرها داخل حدث واجهة
- افتح أو افحص الملف المحفوظ قبل تسليمه إلى نظام آخر أو إلى العميل
حالات فشل يجب اختبارها
- نجاح SaveAs لا يثبت أن العقد التجاري بقي صحيحا
- قد تختلف الخطوط والأذونات والإعدادات الإقليمية بين الخادم وجهاز التطوير
- يجب ألا تكشف السجلات كلمات مرور أو بيانات عملاء أو روابط داخلية
مثال Delphi تفصيلي
يوضح المثال التالي حدود خدمة عملية لهذا الموضوع، مع إبقاء السياسات والسجلات والتحقق في طبقة يمكن اختبارها
procedure BuildSalesDashboardWorkbook(const OutputFile, LogoFile: string; const Rows: TArray<TSalesRow>);
var
Wb: TXLSXWorkbook;
Sh: IXLSWorksheet;
RowIndex: Integer;
Row: TSalesRow;
begin
Wb := TXLSXWorkbook.Create;
try
Sh := Wb.Sheets[0];
Sh.Name := 'Dashboard';
Sh.Range['A1'].Value := 'Quarter';
Sh.Range['B1'].Value := 'Revenue';
Sh.Range['C1'].Value := 'Margin';
Sh.Range['D1'].Value := 'Pipeline';
RowIndex := 2;
for Row in Rows do
begin
Sh.Range['A' + IntToStr(RowIndex)].Value := Row.Quarter;
Sh.Range['B' + IntToStr(RowIndex)].Value := Row.Revenue;
Sh.Range['C' + IntToStr(RowIndex)].Value := Row.Margin;
Sh.Range['D' + IntToStr(RowIndex)].Value := Row.Pipeline;
Inc(RowIndex);
end;
Sh.Range['A1:D1'].ApplyBuiltinStyle(xbsTitle);
Sh.Range['A2:D' + IntToStr(RowIndex - 1)].ApplyBuiltinStyle(xbsGood);
AddColumnChart(Sh, 'A1:D' + IntToStr(RowIndex - 1), 'F3:M18');
AddImageIfPresent(Sh, LogoFile, 'F1');
WriteWorkbookAudit(Wb, 'dashboard', RowIndex - 2);
if Wb.SaveAs(OutputFile) <> 1 then
RaiseWorkbookSaveError(OutputFile);
finally
Wb.Free;
end;
end;
قائمة فحص الإنتاج
- Run the workflow on an empty workbook, a normal customer workbook, and a worst-case workbook
- Open the output with the target spreadsheet application or downstream importer
- Log product version, template version, profile, row count, output path, elapsed time, and warning count
- Keep passwords, temporary files, customer data, and support bundles under explicit retention rules
- Add regression workbooks when a customer file exposes a new edge case