HotXLS Docs

ملاحظات إصدار HotXLS

سجل الإصدارات للميزات المرئية للمستخدم في HotXLS والإصلاحات وتحسينات XLS/XLSX وتحديثات التصدير وتغييرات التوافق وتحديثات الوثائق.

[Unreleased]

الإصدار 2.88.111

الإصدار 2.88.110

الإصدار 2.88.109

الإصدار 2.88.108

الإصدار 2.88.107

الإصدار 2.88.106

الإصدار 2.88.105

الإصدار 2.88.104

الإصدار 2.88.103

الإصدار 2.88.102

الإصدار 2.88.101

الإصدار 2.88.100

الإصدار 2.88.99

الإصدار 2.88.98

الإصدار 2.88.97

الإصدار 2.88.96

الإصدار 2.88.95

الإصدار 2.88.94

الإصدار 2.88.93

الإصدار 2.88.92

الإصدار 2.88.91

الإصدار 2.88.90

الإصدار 2.88.89

الإصدار 2.88.88

الإصدار 2.88.87

الإصدار 2.88.86

الإصدار 2.88.85

الإصدار 2.88.84

الإصدار 2.88.83

الإصدار 2.88.82

الإصدار 2.88.81

الإصدار 2.88.80

الإصدار 2.88.79

الإصدار 2.88.78

الإصدار 2.88.77

الإصدار 2.88.76

الإصدار 2.88.75

الإصدار 2.88.74

الإصدار 2.88.73

الإصدار 2.88.72

الإصدار 2.88.71

الإصدار 2.88.70

الإصدار 2.88.69

الإصدار 2.88.68

الإصدار 2.88.67

الإصدار 2.88.66

الإصدار 2.88.65

الإصدار 2.88.64

الإصدار 2.88.63

الإصدار 2.88.62

الإصدار 2.88.61

الإصدار 2.88.60

الإصدار 2.88.59

الإصدار 2.88.58

الإصدار 2.88.57

الإصدار 2.88.56

الإصدار 2.88.55

الإصدار 2.88.54

الإصدار 2.88.53

الإصدار 2.88.52

الإصدار 2.88.51

الإصدار 2.88.50

الإصدار 2.88.49

الإصدار 2.88.48

الإصدار 2.88.47

الإصدار 2.88.46

الإصدار 2.88.45

الإصدار 2.88.44

الإصدار 2.88.43

الإصدار 2.88.42

الإصدار 2.88.41

الإصدار 2.88.40

الإصدار 2.88.39

الإصدار 2.88.38

الإصدار 2.88.37

الإصدار 2.88.36

الإصدار 2.88.35

الإصدار 2.88.34

الإصدار 2.88.33

الإصدار 2.88.32

الإصدار 2.88.31

الإصدار 2.88.30

الإصدار 2.88.29

الإصدار 2.88.28

الإصدار 2.88.27

الإصدار 2.88.26

الإصدار 2.88.25

الإصدار 2.88.24

الإصدار 2.88.23

الإصدار 2.88.22

الإصدار 2.88.21

الإصدار 2.88.20

الإصدار 2.88.19

الإصدار 2.88.18

الإصدار 2.88.17

الإصدار 2.88.16

الإصدار 2.88.15

الإصدار 2.88.14

الإصدار 2.88.13

الإصدار 2.88.12

الإصدار 2.88.11

الإصدار 2.88.10

الإصدار 2.88.9

الإصدار 2.88.8

الإصدار 2.88.7

الإصدار 2.88.6

الإصدار 2.88.5

الإصدار 2.88.4

الإصدار 2.88.3

الإصدار 2.88.2

الإصدار 2.88.1

الإصدار 2.88.0

الإصدار 2.87.4

الإصدار 2.87.3

الإصدار 2.87.2

الإصدار 2.87.1

الإصدار 2.87.0

الإصدار 2.86.1

الإصدار 2.86.0

الإصدار 2.85.1

الإصدار 2.85.0

الإصدار 2.84.1

الإصدار 2.84.0

الإصدار 2.83.2

الإصدار 2.83.1

الإصدار 2.83.0

الإصدار 2.82.0

الإصدار 2.81.0

الإصدار 2.80.1

الإصدار 2.80.0

الإصدار 2.70.0

الإصدار 2.69.0

الإصدار 2.68.0

الإصدار 2.67.0

الإصدار 2.66.0

الإصدار 2.65.0

الإصدار 2.64.0

الإصدار 2.63.0

الإصدار 2.62.0

الإصدار 2.61.0

الإصدار 2.60.0

الإصدار 2.59.0

الإصدار 2.58.1

الإصدار 2.58.0

الإصدار 2.57.0

الإصدار 2.56.0

الإصدار 2.55.1

الإصدار 2.55.0

الإصدار 2.54.1

الإصدار 2.54.0

الإصدار 2.53.0

الإصدار 2.52.0

الإصدار 2.51.0

  • **[MS-XLSX] تم اجتياز اختبار التوافق المتبادل.** تم اكتشاف خمسة إصلاحات تتعلق بتنسيق البيانات وأمان اللغة في مُنشئ ملفات XLSX من خلال التحقق من صحتها مقابل وثائق Microsoft *[MS-XLSX] — Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format* (الإصدار 20260108) ومتطلبات مخطط XML 1.0 / OOXML الأساسية. لم تتغير واجهة برمجة التطبيقات (API) العامة؛ يمكن إعادة تجميع التطبيقات الحالية وحفظها مرة أخرى دون تعديل.
  • **ملفات .xlsx المحفوظة تفتح الآن في جميع مناطق Windows.** كانت هوامش الصفحة، وعرض الأعمدة، وارتفاع الصفوف، وأحجام الخطوط، وتدرجات الألوان، وتدرجات الألوان الخاصة بالقالب، وأحجام النص الغني للخطوط المخصصة، والقيمة الرقمية لكل خلية (المحاطة بعلامة <v>) يتم تسلسلها باستخدام دالة `FloatToStr` الخاصة بـ Delphi والتي تعتمد على الإعدادات المحلية. في أنظمة Windows التي تم تكوينها لاستخدام الفاصلة (,) كفاصل عشري (معظم أوروبا القارية وأجزاء من آسيا/أمريكا اللاتينية)، كان البرنامج يرسل قيم سمات مثل `width="8,43"` و `top="0,75"`، والتي يرفضها مخطط OOXML. في هذه الحالة، كان Excel يعرض رسالة "وجدنا مشكلة في بعض المحتوى في ملف <file>.xlsx" ويقدم خيارًا لاستعادة الملف، والذي يقوم بحذف إعدادات الصفحة، وعرض الأعمدة، والقيم الرقمية للخلايا. الآن، تستخدم جميع السمات ذات القيم المزدوجة في OOXML فاصلة (.) ثابتة، بغض النظر عن المنطقة النشطة. تم تطبيق نفس الإصلاح لتصحيح ذاكرة التخزين المؤقت الداخلية لعرض الأعمدة/ارتفاع الصفوف التي كانت تخزن سلاسل نصية منسقة حسب الإعدادات المحلية. بعد استدعاء `SetColWidth` / `SetRowHeight` على نفس المصنف، كانت الدالتان `GetColWidth` / `GetRowHeight` ترجعان القيمة `0.0` في تلك المناطق.
  • **الخلايا التي تحتوي على أحرف تحكم لم تعد تتسبب في تعطل ملف Excel.** يمنع معيار XML 1.0 §2.2 استخدام رموز ASCII من 0x00 إلى 0x08، و0x0B، و0x0C، و0x0E إلى 0x1F (بالإضافة إلى U+FFFE / U+FFFF) في أي مكان في مستند XML - ولا يمكن ترميزها أيضًا كإحالات مرجعية لأحرف رقمية. كانت قيم الخلايا التي تحتوي عن طريق الخطأ على هذه البايتات (مثل بيانات قديمة، وسجلات، ومؤشرات مفتاح الإدخال) تُكتب حرفيًا في `...، مما يتسبب في رفض برنامج Excel فتح الملف. الآن، يقوم البرنامج بإزالة نقاط الترميز المحظورة بصمت؛ ويتم الحفاظ على المسافات البيضاء الصالحة (علامة تبويب / سطر جديد / إرجاع).
  • **الآن، يتم التعامل مع الأسطر الجديدة الموجودة داخل قيم السمات بشكل صحيح عند الحفظ وإعادة التحميل.** تقوم XML §3.3.3 بتحويل علامات التبويب/الأسطر الجديدة/إرجاع الأسطر الأولية داخل قيمة سمة إلى مسافة واحدة قبل تمرير القيمة إلى التطبيق. كانت رؤوس/تذييلات متعددة الأسطر، وتعليقات الأسماء المعرفة، وموجهات التحقق من البيانات متعددة الأسطر، وسلاسل عرض الارتباط التشعبي، وأي سمة أخرى تحتوي على سطر جديد، تتقلص إلى مسافة واحدة عند التحميل. الآن، تقوم `XlsxEscapeAttr` بإخراج هذه الأحرف كمرجع أحادي رقمي `&#x9;` / `&#xA;` / `&#xD;` حتى تتمكن Excel من قراءتها مرة أخرى كمسافات بيضاء الأصلية.
  • **تتم إصدار إدخالات `` بترتيب الأعمدة التصاعدي.** تتوقع معايير ECMA-376 الأقسام 18.3.1.4 و 18.3.1.13 أن يظهر كل إدخال `` بترتيب تصاعدي لـ `min`. في السابق، كانت `TStringList(Sorted=True)` تقوم بإزالة التكرارات وفرز فهارس الأعمدة الصحيحة أبجديًا ("10" قبل "2")، مما أدى إلى ظهور ` قبل `` في ورقة عمل تم فيها تخصيص كل من العمود 2 والعمود 10. على الرغم من أن Excel كان يتسامح مع هذا التنسيق، إلا أن Office File Validation كان يضع علامة على الملف، ورفضت برامج استهلاك OOXML الصارمة (مثل Apache POI في الوضع الصارم و LibreOffice مع تمكين التحقق الصارم) هذا الملف. الآن، يتم فرز إدخالات الأعمدة رقميًا قبل إصدارها.

الإصدار 2.50.0

  • OpenOffice excelfileformat.pdf cross-audit pass. Eight follow-up wire-format and lifetime fixes uncovered by re-validating the BIFF8 writer / reader against the OpenOffice Microsoft Excel File Format documentation after the v2.49.0 [MS-XLS] pass. Public API is unchanged; existing applications recompile and re-save without modification.
  • Shared formulas now span the full column range (§5.94 SHAREDFMLA). The SHRFMLA record body wrote colFirst into the colLast byte, collapsing every multi-column shared formula group to a single-column group in Excel. Fill-down formulas across two or more columns now expand to the correct cells when the workbook is reopened. The reader-side colLast width was also corrected.
  • Shared formula Boolean / Error results round-trip correctly (§5.50 FORMULA). The same FormulaValue byte-layout bug fixed in v2.49.0 for standalone formulas was still present in the shared-formula writer (cells that carry a tExp token pointing at a SHRFMLA master). Cached TRUE/FALSE and #REF!/#DIV/0!/etc. values now appear as written.
  • FORMULA option flags identify shared-formula members (§5.50 FORMULA). Cells inside a shared-formula group now set the fShrFmla bit (0x0008) in the FORMULA record option flags so strict parsers recognise the tExp token as a back-reference.
  • Bold and underlined fonts identified correctly by strict readers (§5.45 FONT). The FONT option-flags word now sets bit 0 (bold) and bit 2 (underlined) in addition to the dedicated bls / uls fields.
  • CFRULE option flags carry spec-mandated constant bits (§5.16 CFRULE). When at least one formatting block is present the option-flags DWORD now ORs in bit 7 (0x00000080, "Always 1") and bits 21-19 (0x00380000, "Always 111").
  • CHOOSE() formulas read back correctly (§3.10.5 tAttrChoose). The tAttr parser previously skipped a fixed 4 bytes for every subtype; tAttrChoose ($04) is variable-length. The decoder now reads nc and advances by 6 + 2·nc bytes.
  • Data-validation and conditional-formatting teardown no longer dereferences past the tail. Two Destroy destructors (TDataValidator, TCondFormatter) walked 0..cnt on lists whose valid indices are 0..cnt-1.

الإصدار 2.49.0

  • **تم اجتياز اختبار المطابقة للمواصفات وفقًا لـ [MS-XLS] الإصدار 20250520.** تم إجراء ستة عشر إصلاحًا لتنسيق البيانات والسلوك عبر وحدة كتابة BIFF8، وبرنامج فك ترميز الصيغ، ومسار التشفير، وأداة إنشاء الرسوم البيانية، ووحدة تشغيل التنسيق الشرطي والتحقق من صحة البيانات، والفهرس SST/ExtSST، وقارئ تخزين VBA، ومسار فتح تدفق OLE. لم تتغير واجهة برمجة التطبيقات (API) العامة؛ ويمكن إعادة تجميع التعليمات البرمجية الحالية دون تغيير. أبرز التغييرات مذكورة أدناه.
  • **تم الآن تصحيح معالجة النتائج المنطقية ونتائج الأخطاء في سجل `Formula` بتنسيق `BIFF8`.** [MS-XLS] §2.5.133: تقوم حزمة `FormulaValue` بتضمين علامة النوع في البايت [0] ورمز البوليان/الخطأ في البايت [1]. في السابق، كان البرنامج يقوم بإخراج `0001`/`0002` ككلمة ووضع القيمة في البايت [2]، مما أدى إلى قراءة الصيغ المنطقية المخزنة على أنها "خطأ" وقراءة صيغ الأخطاء على أنها "#NULL!" في جميع التطبيقات.
  • **ألوان الخلايا التي يتم تعيينها عبر `SetColorRGB` يتم عرضها بشكل صحيح.** كان مدير الألوان يكتب `ColorType=1` (نموذج) لقيم RGB و `ColorType=2` (RGB) لقيم النموذج، مما أدى إلى تبديل مساري التعليمات البرمجية. الآن، كلا من وظيفتي التعيين يوجهان إلى الحاوية المطابقة لنوع اللون، بحيث يتم إرسال قيم RGB إلى محلل RGB، ويتم إرسال فهارس النموذج إلى محلل النموذج.
  • **تم إصلاح مشكلة تشفير XOR وفك تشفير RC4.** حلقة فك تشفير الطريقة الأولى XOR الآن تتوافق مع [MS-OFFCRYPTO] §2.3.7.3 (قم بتشفير XOR أولاً، ثم قم بتدوير البتات إلى اليمين 5؛ قم بتعيين فهرس XorArray من موضع التدفق، وليس موضع المعالجة اللاحقة). الآن، `Skip` في RC4 يتجاوز كل حدود 1024 بايت بشكل مستمر بدلاً من القفز مباشرة إلى الكتلة الوجهة، مما يحافظ على حالة تدفق المفتاح متوافقة مع موضع الملف لكل استدعاء `Decrypt` لاحق.
  • **تمت محاذاة تنسيق ورقة الرسم البياني مع المواصفات.** يتم إصدار سجلات SIIndex بترتيب numIndex من 1 إلى 2 إلى 3 ([MS-XLS] §2.4.262؛ كان الترتيب 2 إلى 1 إلى 3، والذي ترفضه المحلل الصارم)، وتم تقييد عدد DEFAULTTEXT إلى الحد الأقصى المحدد في المواصفات وهو 2 ([MS-XLS] §2.1.7.20.1؛ كان العدد 4)، ويستخدم عنصر نائب Chart3DBarShape المعرّف الصحيح وهو $105F (كان $1066).
  • **تم تحميل سجلات تلميحات الارتباط التشعبي بشكل صحيح.** كان برنامج فك ترميز الجزء الرئيسي (`HLinkTooltip`) (الرمز $0800) يقرأ حقول "FrtRefHeader" في موضع الإزاحة 2/4/6/8 بدلاً من 4/6/8/10، مما أدى إلى عدم تطابق مقارنة النطاق المرسي وبالتالي تم تجاهل تلميحات الخلايا بشكل صامت؛ الآن، ترتبط التلميحات بالروابط التشعبية الخاصة بها. تم أيضًا إصلاح خطأ إملائي في برنامج فك ترميز مرجع النطاق BIFF8 في مسار تمديد الإشارة الاحتياطي BIFF5/7، والذي كان يفسر بشكل خاطئ النطاقات التي تحتوي على إزاحات نسبية سلبية للعمود الأخير.
  • **إصلاحات متعلقة بالتنسيق الشرطي والتحقق من صحة البيانات في وقت التشغيل.** في كل من `TCondRange` و `TDVRange`، كانت الدالة `IsContainRow` تُرجع قيمة صحيحة فقط عندما يصبح النطاق صفًا واحدًا (تم عكس المقارنة). الآن، يمكن مسح قواعد التنسيق الشرطي/التحقق من صحة البيانات لكل صف في النطاقات متعددة الصفوف. استخدمت ثلاث دوال تدمير (`CondFormat` و `formatter` و `DVRangeList`) حلقة `for i := 0 to cnt` على القوائم التي تكون فيها الفهارس الصالحة من 0 إلى cnt-1. تم إصلاح الخطأ الناتج عن تجاوز الحد، ولم تعد أحمال العمل طويلة الأمد تتعطل بشكل متقطع أثناء الإغلاق. تقوم قواعد مجموعة الرموز CF12 بإخراج `ct=$06` (مجموعة رموز وفقًا لـ [MS-XLS] §2.4.43) بدلاً من `ct=$05` (مرشح)، بحيث تفتح ملفات Excel التي تحتوي على قواعد مجموعة الرموز مع الحفاظ على القواعد سليمة.
  • **فهرس البحث السريع لـ ExtSST متوافق مع المواصفات للدفاتر الكبيرة.** يتم الآن حساب الحقل `dsst` كـ `max((cstUnique / 128) + 1, 8)` وفقًا لـ [MS-XLS] §2.4.107 بدلاً من القيمة الافتراضية الثابتة 8؛ الدفاتر التي تحتوي على أكثر من حوالي 900 سلسلة فريدة الآن تقوم بإنشاء مصفوفة `rgISSTInf` صحيحة، وتعمل وظيفة البحث السريع في SST في Excel.
  • **تسجل WriteAccess يحترم [MS-XLS] §2.4.349 حيث cch ≤ 54.** حقل `userName.cch` الآن يحمل الطول الفعلي لاسم المستخدم (6 لـ "HotXLS")، مع ملء البايتات المتبقية بـ "trailer" المحدد في المواصفات. في السابق، كان هذا الحقل يحمل قيمة cch=109، وهو ما يعتبره Office File Validation انتهاكًا صارمًا لتنسيق الملف.
  • **تمت مطابقة مسار فتح دفق ملف BIFF8 مع التهجئة المحددة في المواصفات.** في المحاولة الأولى لفتح الدفق باستخدام OLE `OpenStream`، يتم استخدام كلمة "Workbook" (بحرف W كبير وفقًا لـ [MS-XLS] §2.1.7.20) بدلاً من الحروف الصغيرة بالكامل، بحيث يمكن لملفات الحاويات المركبة على تطبيقات OLE الحساسة لحالة الأحرف فتح الدفق في المحاولة الأولى.
  • **لم يعد برنامج قراءة وحدات VBA يحذف آخر بايت من كل تدفق.** كان طول البحث عن نهاية التدفق يستخدم `trunc(l) - 1` بدلاً من `trunc(l)`، مما أدى إلى اقتطاع الجزء الأخير المضغوط من المصدر وتسبب في إنهاء برنامج فك الضغط الخاص بحاويات RLE مبكرًا في بعض الوحدات.

الإصدار 2.48.10

  • ملفات .xls المحفوظة بواسطة HotXLS تتضمن الآن تيارَي مجموعة الخصائص لملف OLE المركب اللذين يتوقعهما Excel في كل مصنف: \005SummaryInformation و \005DocumentSummaryInformation. قبل v2.48.10 كانت بناءات TRIAL فقط تكتبهما (كآلية ختم البانر)؛ كانت بناءات release تنتج ملفات .xls تيار Workbook الخاص بها هو BIFF8 صالح لكن حاوية OLE تفتقد إلى تيارَي بيانات Office الوصفية القياسية. يعامل محلل Excel 2003 الصارم هذا كحالة "File error: data may have been lost" (يحتفظ Excel الحديث ببانر العرض المحمي "هذا الملف به مشاكل"). إضافة التيارَين تحل مربع الحوار في مصنفات المخططات دون تغيير أي سجل BIFF8.
  • يُكتب التياران عبر مسار Win32 StgCreatePropSetStg + IPropertySetStorage.Create + IPropertyStorage.WriteMultiple —— نفس الكود الذي يستخدمه Microsoft Office، لذا يقبل Office File Validation تخطيط البايتات. يُنشأ تيار SummaryInformation بـ AppName="HotXLS" افتراضي ومؤلف فارغ؛ لا تزال بناءات TRIAL تكتب فوق قيم المؤلف / AppName ببانر التجربة عبر lxTrial.XlsTrialStampXlsSummary بعد الختم الافتراضي، لذا تظل ملفات التجربة قابلة للتعرف في لوحة ملف > معلومات > خصائص في Excel. يُنشأ تيار DocumentSummaryInformation فارغاً (لا يزال Win32 يصدر رأس مجموعة الخصائص + خاصية CODEPAGE —— كافية لاعتبار محلل Excel الصارم البيانات الوصفية "موجودة ومُشكَّلة جيداً").
  • هذا الإصلاح عالمي —— يحمل كل ملف .xls محفوظ بواسطة HotXLS الآن بيانات OLE الوصفية القياسية، ليس فقط مصنفات المخططات. أفلتت مخرجات أوراق العمل فقط من الإصدارات السابقة من العَرَض لأن Excel أكثر تسامحاً مع مصنفات أوراق العمل فقط الخالية من البيانات الوصفية مقارنة بمصنفات أوراق المخططات، لكن كانت تفتقد للتيارَين تقنياً أيضاً. تحتوي وحدة Lib/lxXlsSummary.pas الجديدة على إجرائَي المساعد؛ يستدعيها lxHandle.pas بدون شرط داخل TXLSWorkbook.SaveWorkbook بعد أن يملأ StoreWorkbook تيار Workbook وقبل FDocStorage.Commit.
  • هذا الإصدار يغلق تسلسل متابعة chart Phase 2 المكون من ثمانية إصدارات (v2.47.0 — v2.48.10): من ربط السلسلة tArea3D، عبر إعادة محاذاة معرف BRAI، قيم Excel المرصودة لـ sdtX/cValx، موضع SERIESTEXT، إزالة حشو تيار Workbook، سجلات shell على مستوى الورقة، والآن تيارات بيانات OLE الوصفية. النتيجة هي .xls مخطط يفتح في Excel 2003 و Excel الحديث دون أي تحذيرات "الملف به مشاكل"، محاذي بمستوى البايت مع ما يكتبه Excel نفسه لنفس البيانات.

الإصدار 2.48.9

  • أوراق مخططات BIFF8 الآن تحمل المجموعة الكاملة من سجلات shell على مستوى الورقة التي يتطلبها Excel 2003+. عرض chart_phase2_demo.xls الخاص بـ v2.48.8 مخطط الأعمدة بشكل صحيح، لكن Excel 2003 لا يزال يعرض مربع حوار "File error: data may have been lost" (الإصدارات الأحدث من Excel احتفظت ببانر العرض المحمي) لأن substream المخطط كان يفتقد نفس السجلات على مستوى الورقة التي يحملها substream ورقة العمل. ملفات Excel الحقيقية (متغيرات from-scratch و re-saved لمخرج HotXLS) تغلف سجلات المخطط في هذا shell:
    • قبل سجلات المخطط (بين BOF و UNITS): HEADER ($0014، فارغ)، FOOTER ($0015، فارغ)، HCENTER ($0083، قيمة 0)، VCENTER ($0084، قيمة 0)، SETUP ($00A1، إعداد صفحة 34 بايت)، PRINTSIZE ($0033، قيمة 3).
    • بعد سجلات المخطط (بعد أعمق CHART END، قبل EOF): DIMENSIONS ($0200، 14 بايت) يعلن نطاق بيانات التخزين المؤقت، ثلاثة علامات SERIESINDEX ($1065) لفتحات التخزين المؤقت للفئات / القيم / أحجام الفقاعات، NUMBER ($0203، 14 بايت) لكل نقطة قيمة مخزنة مؤقتاً، وWINDOW2 ($023E، متغير 10 بايت لورقة المخطط) في النهاية.
    تم نسخ قيم البايت حرفياً من dev-notes/biffview-refs/excel_column_chart_resaved.xls (مرجع مخطط الأعمدة المحفوظ بواسطة Excel، محلي).
  • التخزين المؤقت للقيم يصدر حالياً عناصر نائبة صفرية (0.0 لكل نقطة بيانات)، مطابقاً لما يكتبه Excel نفسه عند إعادة حفظ مخطط لم يكن تخزينه المؤقت المصدر مملوءاً مسبقاً. لا يزال المخطط يرسم البيانات الحقيقية لأن مراجع PtgArea3d الخاصة بـ BRAI تحل إلى خلايا ورقة العمل المصدر في وقت الرسم — التخزين المؤقت هو ما يسمح لـ Excel بتحليل ورقة المخطط بدون تحذيرات، وليس ما يغذي المخطط. يمكن لإصدار مستقبلي ملء التخزين المؤقت بالأرقام الفعلية من نطاق Values؛ تنسيق wire جاهز.
  • اختبار دخان شامل: افتح Demo/Delphi/XlsCreateChart/chart_phase2_demo.xls المُعاد توليده في Excel 2003 — لم يعد إنذار "File error: data may have been lost" يظهر، ومخطط الأعمدة يُعرض مطابقاً للسابق. يفتح نفس الملف نظيفاً في Excel الحديث بدون بانر العرض المحمي.

الإصدار 2.48.8

  • كاتب BIFF8 (.xls) لم يعد يحشو دفق Workbook ببايتات صفرية في النهاية. كان TXLSWorkbook.StoreOleFile سابقاً يستدعي StoreExtraSpace(Book) بعد سجلات آخر ورقة، ويحشو طول الدفق حتى الحد التالي 512 بايت (قطاع OLE). يعامل محلل Excel الصارم هذه البايتات الصفرية النهائية كدفق وهمي لسجلات بمعرف 0x0000 ويظهر إنذار العرض المحمي "هذا الملف به مشاكل" — مرئي في chart_phase2_demo.xls الخاص بـ v2.48.7 حتى بعد إصلاح شكل wire BRAI / sdtX / SERIESTEXT وعرض المخطط بشكل صحيح. إزالة الاستدعاء تزيل الحشو من محتوى دفق Workbook؛ لا يزال حشو قطاع OLE يحدث، ولكن في طبقة حاوية CFB أسفل الدفق حيث يضعه Excel نفسه (كل .xls حفظه Excel له طول دفق Workbook غير محاذٍ للقطاع).
  • تاريخ الأعراض: أي .xls حفظه HotXLS لا يقع طوله الإجمالي بالبايت من السجلات الصالحة صدفة على حدود 512 بايت كان يحمل دفق الأصفار النهائية. وُجد الخطأ منذ commit التهيئة للمستودع لكنه نادراً ما ظهر — معظم المصنفات لها سجلات كافية بحيث ينتهي الحشو صغيراً (≤ 4 بايتات صفرية يتسامح معها Excel). مصنفات ورقة المخطط تقع بعيداً تحت حد القطاع (demo v2.47.0 — v2.48.7 يحشو 420 بايت صفرية)، لذا فهنا أصبح إنذار العرض المحمي متسقاً.
  • طريقة StoreExtraSpace نفسها تبقى كرمز ميت خاص في lxHandle.pas في حال احتاج مسار رمز مستقبلي حقاً دفقات مدوّرة بالقطاع؛ نقطة الاستدعاء في StoreOleFile تُزال. طول دفق Workbook الآن مساوٍ تماماً لطول بايتات جميع السجلات الصالحة (demo المخطط: 3164 بايت؛ مرجع Excel from-scratch: 4419 بايت — كلاهما غير محاذٍ للقطاع). مسارات رمز القارئ لا تتأثر — قرأ HotXLS دائماً دفقات Workbook غير المحاذية للقطاع من ملفات Excel-saved بشكل صحيح.

الإصدار 2.48.7

  • سجلات سلسلة مخططات BIFF8 تُعرض الآن أخيراً بشكل صحيح في Excel. الإصلاح هو إعادة محاذاة تعيينات معرف BRAI مع [MS-XLS] §2.4.51 — وثّق خطة التنفيذ الأم هذه التعيينات معكوسة، مما نشر الخطأ عبر كل إصدار مخطط من v2.41.0 إلى v2.48.6. دلالات المعرف الصحيحة هي:
    • id = 0اسم السلسلة / تسمية وسيلة الإيضاح (قالت الخطة: categories)
    • id = 1 — values (صحيح)
    • id = 2 — categories (قالت الخطة: name)
    • id = 3 — bubble sizes (قالت الخطة: errBars)
    أعراض Excel للقلب متطابقة تماماً: نطاق Categories (تسميات نصية A2:A5) كان يُكتب كـ BRAI id=0 → يقرأه Excel كاسم السلسلة ويربط الخلايا الأربعة إلى "North South East West" لوسيلة الإيضاح / العنوان التلقائي. حرف PTG tStr 'Q1 Sales' كان يُكتب كـ BRAI id=2 → توقع Excel نطاق خلايا فئة هناك، وجد حرف سلسلة، استسلم وعرض المحور X كأربعة أصفار.
  • تم إعادة المحاذاة أيضاً مع شكل wire لمخطط الأعمدة المحفوظ بواسطة Excel: SERIES.sdtX الآن 0x0003 (القيمة المرصودة لـ Excel للفئات النصية، وليس 0x0001 الموثّق في [MS-XLS] §2.4.252)، وcValx يحمل عدد الفئات الفعلي بدلاً من 0. تتعارض قاعدة "cValx MUST = 0 عندما sdtX ∈ {1, 3}" مع كل عينة محفوظة بواسطة Excel تم فحصها.
  • يعود حامل الاسم الحرفي SERIESTEXT ($100D)، لكن في المكان الصحيح: مباشرة بعد BRAI id = 0، لا يزال داخل كتلة SERIES BEGIN/END. هذا ما تفعله ملفات Excel الحقيقية — كانت نقطة إخراج v2.48.5 (بعد عنقود BRAI بأكمله، قبل DataFormat) خاطئة وكسرت محلل المخطط؛ الموقع الصحيح هو بجوار BRAI اسم السلسلة مباشرة.
  • ملفات المخططات المحفوظة في v2.41.0 — v2.48.6 جميعها تحمل شكل wire BRAI المعكوس. تفتح في Excel دون خطأ لكنها تظهر أعراض وسيلة الإيضاح / المحور X أعلاه. أعد الحفظ عبر v2.48.7+ للترحيل؛ بدون تغيير API — نفس استدعاء AddChartSheet ينتج الآن مخططاً يُعرض بشكل مطابق لما يكتبه Excel نفسه لنفس البيانات.
  • أداة فحص جديدة على مستوى البايتات dev-notes/biffview-refs/dump_chart_substream.py تفرغ تيار المخطط الفرعي لأي .xls BIFF8 مع فك ترميز لكل سجل (SERIES / BRAI / SERIESTEXT / AXIS / CATSERRANGE / LEGEND / OBJECTLINK / POS / TEXT). استُخدمت أثناء هذا الإصدار لإجراء byte-diff لمخرج HotXLS مقابل عينات المرجع المحفوظة بواسطة Excel؛ متاحة لمتابعات spec المخططات المستقبلية.

الإصدار 2.48.6

  • تيار فرعي لورقة مخططات BIFF8 يتراجع عن تغييرات v2.48.5. اختبار Excel الفعلي على demo المُعاد توليده v2.48.5 لم يعرض المخطط على الإطلاق — أسوأ من خط أساس v2.47.0 (حيث رُسم المخطط ولكن مع تسميات محور X خاطئة). كان التغييران في v2.48.5 هما السبب:
    • SERIES.sdtX = 4 غير مقبول فعلياً من Excel رغم أن Apache POI يكشف CATEGORY_DATA_TYPE_TEXT = 4. تشترط [MS-XLS] §2.4.252 بصرامة أن يكون sdtX 0x0001 أو 0x0003.
    • إضافة سجل SERIESTEXT ($100D) داخل كتلة SERIES BEGIN/END انتهاك بنيوي — SERIESTEXT ينتمي إلى كتل TEXT (سياقات عنوان المخطط / عنوان المحور / تسميات البيانات)، وليس داخل كتلة SERIES. تضمينه هناك أربك محلل المخططات في Excel ليرفض التيار الفرعي بأكمله.
  • v2.48.6 يستعيد شكل wire لـ v2.47.0 ويضيف إصلاح امتثال للمواصفات: SERIES.cValx الآن 0 عندما sdtX = 1 (قاعدة [MS-XLS] §2.4.252 spec MUST). قبل v2.48.6 كان يُكتب cValx = count (4 في demo) منتهكاً القاعدة، وربما يساهم في إنذار العرض المحمي "الوثيقة بها مشاكل" في Excel. cValy لا يزال يحمل عدد القيم الفعلي (sdtY=1 ليس لها قاعدة صفر).
  • demo Delphi جديد XlsCreateChart في Demo/Delphi/XlsCreateChart/ ينشئ مصنف بورقتين: ورقة "Data" بأربعة صفوف (Region, Sales) وورقة مخطط أعمدة "Chart1" تربط سلسلتها Data!$A$2:$A$5 / Data!$B$2:$B$5 كـ Categories / Values. هذا demo هو الخلف الدائم لـ chart_phase2_demo.xls المؤقت الذي وضعته v2.47.0 — v2.48.5 في جذر المستودع لاختبار BiffView؛ ملف الجذر تمت إزالته، وdemo الجديد يكتب مخرجاته بجوار .exe الخاص به.
  • غير محلول معروف: مع شكل wire لـ v2.48.6، لا يزال Excel يرسم تسميات محور X لمخطط الأعمدة كأصفار ويتراجع إلى ربط نص خلايا الفئات للأسطورة (بدلاً من استخدام حرف PTG tStr الحرفي من BRAI id=2 'Q1 Sales'). هذه فجوة حقيقية في شكل wire تحتاج إلى مخطط أعمدة محفوظ بواسطة Excel كمرجع للقيام بـ diff البايتات — متتبع كمتابعة. منطقة رسم الأشرطة الأربعة نفسها تُرسم بشكل صحيح (الارتفاعات 100/150/200/175 تطابق Values).

الإصدار 2.48.5

  • سجلات السلاسل لمخططات BIFF8 تُعرض الآن بشكل صحيح في Excel. أضافت v2.47.0 ربط tArea3D لنطاقات Categories / Values، لكن Excel ظل يرسم جميع تسميات المحور X بالقيمة 0 ويستخدم نص الفئات المتصل ("North South East West") كوسيلة إيضاح وعنوان تلقائي بدلاً من Name المُقدَّم من المستخدم. إصلاحان يعيدان السلوك المقصود:
  • الحقل sdtX في سجل SERIES صار الآن 4 (فئات نصية)، وليس 1. توثق [MS-XLS] §2.4.252 فقط 1 (تواريخ) و 3 (تتابع BIFF7)، لكن ملفات مخططات الأعمدة / الأشرطة / الخطوط التي يحفظها Excel فعلياً تكتب 4 لمحاور الفئات النصية (يطابق ثابت CATEGORY_DATA_TYPE_TEXT في Apache POI). مع sdtX=1، حاول Excel إجبار الخلايا 'North' / 'South' على أن تكون أرقاماً → fallback إلى 0؛ مع sdtX=4 تظهر التسميات النصية كما هي. كما كان الشكل السابق ينتهك قاعدة المواصفات "cValx يجب أن يكون صفراً عندما sdtX=1".
  • يُكتب الآن سجل SERIESTEXT ($100D) داخل كتلة SERIES BEGIN/END (بعد عنقود BRAI وقبل DataFormat) كلما قُدِّم Name حرفي. تُحتفظ آلية النصف الأول من Phase 2 (BRAI id=2 + PTG tStr) لاكتمال المواصفات، لكن Excel فعلياً يأخذ تسمية وسيلة الإيضاح والعنوان التلقائي من SERIESTEXT؛ مع وجود متغير BRAI فقط، كان Excel يلجأ إلى دمج خلايا الفئات. بعد هذا الإصلاح، تعرض وسيلة الإيضاح Name الحقيقي (مثل 'Q1 Sales') ويترك العنوان الفارغ خانة العنوان التلقائي خاوية.
  • الترحيل: لا تزال مخرجات ورقة المخطط من v2.42.0 — v2.47.0 تفتح في Excel بدون خطأ ولكنها تعرض الأعراض أعلاه. أعد الحفظ باستخدام v2.48.5+ للحصول على شكل wire المُصحَّح؛ لا يلزم تغيير API، نفس استدعاء AddChartSheet ينتج المخطط الصحيح الآن.

الإصدار 2.48.4

  • إصدار BIFF8 CFEX ($087B) قد تقاعد. لم يعد HotXLS يكتب CFEX المقترن بعد كل CF12 — كل تكوين Data Bar / Color Scale / Icon Set ينتقل الآن مضمنًا في الذيل حسب النوع لـ CF12 (v2.48.1 — v2.48.3). Apache POI / NPOI يتجاهلون CFEX على أي حال، لذا هو تبسيط خالص.
  • مسار قراءة BIFF8 CF12 يستهلك الآن الذيل حسب النوع مباشرة من CF12. هذا يكمل إعادة كتابة تنسيق سلك Gap #6 في 5 PATCHes (v2.48.0 header + v2.48.1 data_bar + v2.48.2 color_gradient + v2.48.3 multistate + v2.48.4 تقاعد CFEX).

الإصدار 2.48.3

  • قواعد Icon Set في BIFF8 CF12 ($087A) تصدر الآن السجل الفرعي multistate المتوافق مع NPOI مضمنًا، مما يسمح لـ Apache POI / NPOI بقراءة عائلة الأيقونات، عتبات كل نقطة، وعلامات reverse / icon-only مباشرة من CF12. التخطيط يطابق NPOI IconMultiStateFormatting.Serialize().
  • يجب إعادة حفظ ملفات .xls المُولَّدة بواسطة HotXLS v2.48.2 من خلال v2.48.3 ليحصل Icon Set على الذيل المضمن الجديد. إيقاف إصدار CFEX سيأتي في v2.48.4.

الإصدار 2.48.2

  • قواعد Color Scale ذات النقطتين والثلاث نقاط في BIFF8 CF12 ($087A) تصدر الآن السجل الفرعي color_gradient المتوافق مع NPOI مضمنًا، مما يسمح لـ Apache POI / NPOI بقراءة العتبة واللون وموضع الاستيفاء لكل نقطة مباشرة من CF12. التخطيط يطابق NPOI ColorGradientFormatting.Serialize().
  • يجب إعادة حفظ ملفات .xls المُولَّدة بواسطة HotXLS v2.48.1 من خلال v2.48.2 ليحصل Color Scale على الذيل المضمن الجديد. ذيل Icon Set سيأتي في v2.48.3.

الإصدار 2.48.1

  • قواعد Data Bar في BIFF8 CF12 ($087A) تصدر الآن السجل الفرعي data_bar المتوافق مع NPOI مضمنًا (28 بايت تُلحق بعد template_params)، مما يسمح لـ Apache POI / NPOI بفك تشفير لون الشريط وعتبات الحد الأدنى/الأقصى وحدود الطول بالنسبة المئوية مباشرة من CF12، دون الرجوع إلى سجل CFEX القديم. التخطيط يطابق NPOI DataBarFormatting.Serialize().
  • يجب إعادة حفظ ملفات .xls المُولَّدة بواسطة HotXLS v2.48.0 من خلال v2.48.1 ليحصل Data Bar على الذيل المضمن الجديد. ذيول Color Scale / Icon Set ستصل في v2.48.2 — v2.48.3.

الإصدار 2.48.0

  • تم تصحيح تخطيط رأس سجل BIFF8 CF12 ($087A) وفقًا لـ NPOI CFRule12Record.serialize() وملفات Excel المحفوظة المرجعية. يكتب Excel ext_formatting_length(4) قبل رموز الصيغة وكتلة template_params ذات بادئة الطول؛ كانت هذه الحقول في HotXLS في ترتيب خاطئ. ذيول الأنواع (data_bar / color_gradient / multistate) ستأتي في v2.48.1 — v2.48.3.
  • يجب إعادة حفظ ملفات .xls المُولَّدة بواسطة HotXLS v2.34.0 — v2.47.1 من خلال v2.48.0 لإعادة كتابة سجلات CF12 الخاصة بها. تمت إزالة حقل nID بحجم 2 بايت غير المتوافق مع المواصفات في نهاية كل CF12.

الإصدار 2.47.1

  • تم تصحيح تنسيق سلك سجل BIFF8 CONDFMT12 ($0879) ليتطابق مع الملفات المحفوظة بواسطة Excel. التطبيق السابق اتبع مسودة spec مبكرة تركت النطاق المرتبط بـ 8 بايت كـ "محجوز" داخل FtrHeader وأدرجت حقل محجوز 4 بايت غير موجود قبل numCF. ملفات .xls من Excel فعلاً تملأ تلك 8 بايت بنطاق الخلايا المرتبط. المرجع: poi_ConditionalFormattingSamples.xls السجل 152 يطابق الآن بايت ببايت.
  • يجب إعادة حفظ ملفات .xls المُولَّدة بواسطة HotXLS v2.34.0 — v2.47.0 من خلال v2.47.1 لإصلاح سجلات CONDFMT12 الخاصة بها.

الإصدار 2.47.0

  • إنشاء ورقة مخطط BIFF8 يربط الآن نطاقات بيانات حقيقية بالسلاسل. سلاسل A1 لـ Categories و Values المُمرَّرة إلى التحميل الزائد ذي 6 وسائط لـ AddChartSheet (مثل 'Data!$A$2:$A$5') تُترجم إلى رموز PTG من نوع tArea3D تُكتب في سجلات السلسلة BRAI id=0 (الفئات) و BRAI id=1 (القيم). تُظهر ملفات .xls المفتوحة في Excel الآن نقاط بيانات حقيقية في منطقة الرسم بدلاً من المخطط الفارغ في v2.42.0.
  • تحليل اسم الورقة وتسجيل EXTERNSHEET تلقائيان: المُحلِّل يبحث عن الورقة المُسمَّاة في المصنف، ويسجل إدخال XTI إن لم يكن موجوداً، ويكتب ixti ذا الأساس صفر في جسم PtgArea3d. عند إعادة الحفظ، يُعاد تسلسل تيار سجلات المخطط عبر مُترجم الصيغ، فيبقى ixti متسقاً مع الترتيب النهائي لـ EXTERNSHEET.
  • أشكال المراجع المقبولة: Sheet1!$A$2:$A$5 (مطلق)، Sheet1!A2:A5 (مع تسامح علامات النسبي — تُخزَّن سلاسل المخطط دائماً كمطلق)، 'My Sheet'!$A$1:$B$5 (أسماء أوراق تحوي مسافات بين علامتي اقتباس مفردتين)، ومراجع خلية واحدة مثل Sheet1!$A$1 (تتحول إلى PtgArea3d بحجم 1×1). أعداد نقاط البيانات (cValx / cValy) تُشتق تلقائياً من أبعاد المنطقة.
  • أشكال المراجع غير المدعومة ترتد بصمت إلى BRAI نائب cce=0 على نمط v2.41.0 ليبقى المخطط قابلاً للفتح في Excel: المراجع بين المصنفات ([Book2.xls]Sheet1!...)، النطاقات المُسمَّاة (Sheet1!ProfitColumn)، المراجع بلا بادئة الورقة !، والمراجع التي تشير إلى ورقة المخطط نفسها. تُؤجَّل هذه الحالات إلى المراحل التالية.
  • يكتمل بهذا Roadmap #10 Phase 2 (مخطط الأعمدة من البداية للنهاية). تسميات السلاسل (النصف الأول من Phase 2، v2.42.0) مع ربط نطاقات السلاسل (هذا الإصدار) يعنيان أن مخطط الأعمدة المُنشَأ عبر AddChartSheet يعرض الآن عناصر وسيلة إيضاح صحيحة وبيانات حقيقية بدون معالجة لاحقة في Excel.

الإصدار 2.46.0

  • وحدة فك ترميز DXF على جانب BIFF8 تحل الآن ألوان xclrType=1 (لوحة فهرسة) من لوحة Excel 2003 القياسية بـ 64 لونًا.
  • يستخدم البحث لوحة افتراضية Excel 2003 المدمجة — icv 0..7 هي 8 ألوان النظام، icv 8..15 تعكس ألوان النظام، icv 16..63 هي القيم الافتراضية القابلة للتخصيص القياسية. icv خارج النطاق يعود إلى الأسود.
  • تخصيص سجل PALETTE BIFF8 لا يتم استشارته.
  • مسارا xclrType=0 (تلقائي) و xclrType=2 (RGB) لم يتغيرا.

الإصدار 2.45.0

  • قواعد التنسيق الشرطي تقوم الآن بـ round-trip لـ سمة priority على كل من XLSX <cfRule priority="N"/> وحقل BIFF8 CF12 ipriority.
  • خاصية Priority جديدة على TCondFormatRule (جانب BIFF8) و TXLSXConditionalFormat (جانب XLSX). افتراضيًا صفر، يحافظ على سلوك auto-by-index الموجود؛ قيمة موجبة تثبت الأولوية.
  • Priority يتحكم في طبقات القواعد المتعددة — عندما تغطي عدة قواعد نفس النطاق، يطبقها Excel بترتيب الأولوية. Round-trip للأولوية يحافظ على ترتيب التصيير المقصود للمستخدم.
  • السلوك الافتراضي لم يتغير للمتصلين الذين لا يلمسون Priority.

الإصدار 2.44.0

  • قواعد التنسيق الشرطي لمجموعة الأيقونات تدعم الآن تجاوزات الأيقونة لكل توقف على جانب XLSX. كل من توقفات 3 / 4 / 5 يمكنها إلغاء الاشتراك من افتراضي العائلة وعرض أي أيقونة من أي من عائلات أيقونات Excel 2007 المدمجة السبع عشرة، يتم تحديدها بـ اسم المجموعة + معرف الأيقونة. عنصر OOXML: <cfIcon iconSet="OtherSet" iconId="N"/>.
  • طرق جديدة على TXLSIconSetSpec: SetIconOverride(stopIndex, OverrideSet, IconId) و ClearIconOverride(stopIndex). خصائص للقراءة فقط HasIconOverride[i]، IconOverrideSet[i]، IconOverrideId[i].
  • الكاتب XLSX يصدر أبناء <cfIcon> فقط للتوقفات التي استدعت SetIconOverride. القارئ يحلل عناصر <cfIcon> الواردة حسب الموضع.
  • القيود المعروفة: BIFF8 (.xls) CFEX ليس لديه فتحة لتجاوزات لكل توقف؛ قاعدة مع تجاوزات محفوظة في .xls تعرض افتراضي العائلة لجميع التوقفات.

الإصدار 2.43.0

  • قواعد التنسيق الشرطي XLSX (.xlsx) تقوم الآن بـ round-trip مراجع ألوان السمة في عنصر <color> لقواعد شريط البيانات وتدرج الألوان. سابقًا كان الكاتب يصدر فقط <color rgb="FFRRGGBB"/> ويتجاهل القارئ سمات theme / tint.
  • طرق جديدة على TXLSDataBarSpec و TXLSCfValue تبدل الخانة إلى وضع السمة: SetThemeColor(themeId, tint) و ClearThemeColor.
  • الكاتب XLSX يصدر <color theme="N"/> عندما يكون Tint تمامًا 0.0، أو <color theme="N" tint="0.5"/> عندما يكون غير صفري.
  • السلوك الافتراضي لم يتغير: القواعد المنشأة بنقاط الدخول RGB-only الموجودة تستمر في إصدار <color rgb="..."/> كما كان من قبل.
  • القيود المعروفة: لا يزال BIFF8 (.xls) CFEX يحمل فقط لون RGB؛ يبقى حل لوحة سمة المصنف خارج النطاق؛ لا تحمل قواعد iconSet عناصر <color>.

الإصدار 2.42.0

  • تكتسب واجهة برمجة تطبيقات إنشاء ورقة مخطط BIFF8 تحميلًا زائدًا خامسًا لـ AddChartSheet يقبل مصفوفة سجلات TXLSChartSeriesInfo (Name، Categories، Values). كل Name غير فارغ يُكتب في التيار الفرعي للمخطط كتسمية سلسلة حرفية عبر رمز PTG tStr على BRAI اسم السلسلة (id=2). يستخدم Excel هذه التسمية في وسيلة الإيضاح ومحدد السلاسل، لذا يُشحن المخطط متعدد السلاسل الآن مع تسميات سلاسل مناسبة بدلًا من العناصر النائبة الافتراضية "Series1 / Series2".
  • TXLSChartSeriesInfo يُعاد تصديره من lxHandle جنبًا إلى جنب مع TXLSChartType، حتى يتمكن المتصلون من بناء المصفوفة دون استيراد lxChartBuilder مباشرة.
  • هذا هو النصف الأول من Roadmap #10 المرحلة 2 (مخطط الأعمدة من البداية إلى النهاية). مسار اسم السلسلة موصول؛ ربط بيانات الفئة والقيمة (تحويل سلاسل A1-range Categories و Values إلى مراجع نطاق خلايا tArea3D حقيقية داخل BRAI) لا يزال عنصرًا نائبًا — هذان الحقلان مقبولان في واجهة برمجة التطبيقات لكنهما لم يُرسلا بعد إلى التيار الفرعي. سيوجههما إصدار لاحق عبر مُجمِّع الصيغ وجدول مراجع EXTERNSHEET لإكمال النصف الثاني من المرحلة 2.

الإصدار 2.41.0

  • يكتسب HotXLS إنشاء ورقة مخطط BIFF8 برمجيًا. مجموعة جديدة من التحميلات الزائدة لـ AddChartSheet على Sheets تكتب تيارًا فرعيًا كاملاً للمخطط في ملف .xls المحفوظ، بينما كان من قبل لا يمكن الحفاظ على أوراق المخطط إلا بشكل غامض في رحلة ذهاب وعودة load-save. أربع تحميلات زائدة تغطي نقاط الدخول الشائعة: الاسم فقط / الاسم + نوع المخطط / + العنوان / + عنوان محور الفئة + عنوان محور القيمة. IXLSWorksheet المُرجَع يظهر في مجموعة Sheets، ويحصل على إدخال boundsheet لورقة المخطط عند الحفظ، ويفتحه Excel كعلامة تبويب مخطط.
  • تعداد جديد TXLSChartType يحدد نوع المخطط: xlsChartTypeColumn، xlsChartTypeBar، xlsChartTypeLine، xlsChartTypePie. يُعاد تصدير التعداد من lxHandle حتى لا يحتاج كود المستخدم إلى استيراد وحدة chart-builder مباشرة.
  • التيار الفرعي المُرسَل للمخطط يغطي تأطير BIFF8 الذي تطلبه المواصفة — BOF (dt=$0020)، Chart / PlotGrowth / Frame / Series / SheetProperties / AxesUsed / AxisParent (POS + محور الفئة + محور القيمة + PlotArea + Frame + ChartFormat + سجل النوع + ChartFormatLink + Legend)، EOF — حتى يتعرف Excel على النتيجة كعلامة تبويب مخطط حقيقية من النوع المطلوب. رحلة الذهاب والعودة الحالية عبر TXLSCustomChart لم تتغير.
  • هذه أول دفعة من Roadmap #10 (التيار الفرعي CHART — أكبر عنصر في تدقيق BIFF8). تقدم المرحلة 1 الإطار وسطح واجهة برمجة التطبيقات حتى يمكن للمراحل التالية إضافة ربط بيانات السلاسل وعناوين المحاور والتنسيق التفصيلي لكل نوع.
  • القيود: ورقة المخطط الجديدة تعرض مخطط افتراضي فارغ من النوع المطلوب. ربط بيانات السلاسل (ربط المخطط بنطاقات الخلايا الفعلية)، نص العنوان المُعبأ، والتنسيق التفصيلي لكل نوع (gap width / overlap / hole size / marker style) مؤجلة إلى المراحل اللاحقة. يحافظ Excel على وجود المخطط ونوعه عند الحفظ وإعادة الفتح، لكن ليس بعد البيانات التي يقدمها المستخدم.

الإصدار 2.40.0

  • عرض Delphi جديد XlsCondFormat12 ضمن Demo/Delphi/XlsCondFormat12/ يوضح واجهة برمجة تطبيقات امتداد التنسيق الشرطي v2.34.0+ من البداية إلى النهاية. ثلاثة أزرار تتيح إنشاء CondFormat12.xls (الواجهة الخلفية BIFF8)، أو CondFormat12.xlsx (الواجهة الخلفية XLSX)، أو كلاهما جنبًا إلى جنب. كل ورقة إخراج تحمل نفس أنواع القواعد الأربعة — شريط البيانات، تدرج ثلاثي الألوان، مجموعة أيقونات (3 أسهم)، وتدرج ثنائي الألوان — تغطي عشرة صفوف بيانات لفتح الملفات في Excel والتحقق بصريًا.
  • مسار BIFF8 يمارس أيضًا تجاوز نمط DXF v2.35.0: قاعدة شريط البيانات ترفق لون خط أبيض غامق لتبقى نصوص الخلية مقروءة فوق تعبئة الشريط الداكنة.
  • فيكستر اختبار DUnitX جديد في Tests/Delphi/HotXLS.CondFormat12Tests.pas يغطي عشرة سيناريوهات round-trip وسطح واجهة برمجة التطبيقات: round-trip BIFF8 لجميع أنواع القواعد الأربعة، round-trip نمط DXF لألوان RGB، ألوان السمة وعلامات الخط، و round-trip XLSX لشريط البيانات / تدرج ثلاثي / مجموعة أيقونات مع ShowOnly. الفيكستر موصول بـ HotXLSDelphiTests.dpr و .dproj المطابق.
  • لدعم فيكستر الاختبار، يكشف TCondFormat عن اثنين من الموصلات العامة الجديدة: RuleCount و Rule(I).
  • ملاحظة التحقق: افتح .xls و .xlsx الخاصة بالعرض التوضيحي في Excel لرؤية قواعد امتداد CF12 / OOXML الأربعة معروضة جنبًا إلى جنب.

الإصدار 2.39.0

  • تجاوز نمط XF التفاضلي (DXF) على قواعد التنسيق الشرطي يدعم الآن ترميز ألوان السمة بالإضافة إلى وضع RGB الموجود. يمكن تعيين كل خانة لون — لون الخط، خلفية التعبئة، المقدمة التعبئة — مقابل فهرس سمة المصنف بالإضافة إلى قيمة tint.
  • ثلاث طرق جديدة على TXLSDxfStyle تختار خانة في وضع السمة: SetFontColorTheme(themeId, tint)، SetFillBgColorTheme(themeId, tint)، SetFillFgColorTheme(themeId, tint). Tint هو single في النطاق [-1.0, +1.0]. تظل طرق SetXxxColor(rgb) الموجودة في وضع RGB؛ الوضعان متبادلان حصرياً لكل خانة.
  • استعلم عن الوضع النشط عبر الخصائص الجديدة للقراءة فقط XxxColorIsTheme / XxxColorThemeId / XxxColorThemeTint. تُرجع HasXxxColor True في كلا الوضعين.
  • تنسيق سلك BIFF8 يتبع تخطيط XFProp Colour القياسي: xclrType=2 + LongWord BGR من 4 بايت لـ RGB، xclrType=3 + tint موقع من 2 بايت × 32767 + فهرس السمة من 4 بايت لوضع السمة. يعكس مفكك بلوب DXF هذا التوزيع.
  • القيود المعروفة: يتم دعم round-trip في وضع السمة فقط على جانب BIFF8 (.xls) — لا يزال جانب XLSX (.xlsx) يصدر ويقرأ فقط <color rgb="..."/>.

الإصدار 2.38.0

  • قراءة XLSX (.xlsx) تتعرف الآن على قواعد امتداد التنسيق الشرطي في Excel 2007+ في الملفات الواردة — شريط البيانات، تدرج الألوان (2 و 3 نقاط، يتم اكتشافها تلقائيًا من عدد cfvo)، و مجموعة الأيقونات — وتعبئة كائن TXLSXConditionalFormat المطابق بحيث يمكن لكود المستخدم فحص هذه القواعد و round-trip دون فقدانها.
  • يحلل القارئ غلاف OOXML <cfRule type="dataBar|colorScale|iconSet"> والجسم الداخلي <dataBar> / <colorScale> / <iconSet>، ويتنقل بين إدخالات <cfvo> الفرعية لاستعادة type و val لكل عتبة، وإدخالات <color> لاستعادة لون شريط البيانات أو ألوان كل توقف للتدرج.
  • تقوم قواعد مجموعة الأيقونات بـ round-trip لاسم عائلة iconSet (المجموعات الأساسية السبع عشرة لـ Excel 2007)، وعلامة reverse، وعلامة showValue (المعينة إلى ShowOnly).
  • تُحوَّل قيم الألوان المحللة من سمة OOXML rgb="AARRGGBB" إلى نفس اصطلاح BGR LongWord المستخدم بواسطة واجهة برمجة تطبيقات الكتابة.
  • معالجة XLSX <cfRule type="cellIs"> الموجودة لم تتغير؛ يختار dispatch الأنواع الجديدة فقط عندما تسميها سمة type.
  • القيود المعروفة: تُقرأ مراجع لون السمة كـ 0؛ لم يتم التقاط تجاوزات iconId لكل توقف؛ يتم تجاهل سمة priority الخاصة بـ <cfRule> عند القراءة.

الإصدار 2.37.0

  • تنسيق سجل BIFF8 CFEX يحمل الآن مصفوفة cfvo الكاملة لكل توقف (kind + سلسلة القيمة + اللون، وفقًا لدلالات cfvo في [MS-XLS]) بدلًا من لون الشريط/التوقف فقط. قواعد شريط البيانات تحتفظ الآن بأنواع وقيم العتبات min/max، تدرجات الألوان تحتفظ بتركيبة kind + value + color لكل توقف، ومجموعات الأيقونات تحتفظ بـ kind + value لكل عتبة بالإضافة إلى علامات reverse / showOnly.
  • كتابة CFEX تضيف بايت علم الإصدار (ver=1) بحيث تتراجع القراء القدامى لـ HotXLS الذين يتوقعون تخطيط CFEX الأدنى v2.34.0 بصمت إلى التفسير القديم. القارئ v2.37.0 يتعرف أيضًا على سجلات ver=0 المنتجة من قبل البنيات القديمة.
  • يكتشف القارئ الآن إدخالات CONDFMT + CONDFMT12 المختلطة على نفس النطاق — نمط شائع في الملفات المحفوظة بواسطة Excel. تم تمييز إدخال CONDFMT الأقدم عبر خاصية IsShadowed الجديدة على TCondFormat. يستمر الكاتب في إصدار كلتا العائلتين من السجلات عند الحفظ.
  • خاصية TotalRange الجديدة على TCondFormat تكشف عن النطاق المدمج الذي كان خاصًا سابقًا.
  • القيود المعروفة: اكتشاف الظل محدود بمطابقة صندوق محدد دقيق. يحفظ round-trip cfvo الكامل لـ ColorScale قيم kind الثمانية القياسية ولكن لا يحفظ بيانات تعريف صبغة لون السمة في Excel.

الإصدار 2.36.0

  • يدعم إخراج XLSX (.xlsx) الآن الأنواع الثلاثة لقواعد امتداد التنسيق الشرطي في Excel 2007+ — شريط البيانات، تدرج الألوان (2-stop و 3-stop)، و مجموعة الأيقونات — مما يجلب الواجهة الخلفية XLSX إلى التكافؤ مع الواجهة الخلفية BIFF8 (.xls) لـ v2.34.0. أربع طرق عامة جديدة على TXLSXWorksheet تعكس واجهة برمجة تطبيقات XLS: AddCondFormatDataBar، AddCondFormatColorScale2، AddCondFormatColorScale3، AddCondFormatIconSet.
  • يصدر ملف .xlsx المحفوظ الآن عنصر OOXML <conditionalFormatting> بهيكل فرعي مناسب لكل نوع قاعدة: <cfRule type="dataBar"><dataBar> للأشرطة، <cfRule type="colorScale"><colorScale> مع 2 أو 3 cfvo + توقفات اللون، و <cfRule type="iconSet"><iconSet iconSet="..."> مع مجموعة cfvo المناسبة.
  • تخطيط أسماء مجموعات الأيقونات المدمجة يغطي نفس مجموعات Excel 2007 الأساسية السبعة عشرة المدعومة بواسطة الواجهة الخلفية XLS، يتم إنتاجها كسلسلة سمة OOXML iconSet القياسية.
  • أنواع العتبات وقيم الألوان تستخدم نفس التعداد واتفاقية الألوان الخاصة بواجهة برمجة تطبيقات XLS — نفس TXLSCfValueKind، نفس تنسيق LongWord BGR من Delphi. استدعاءات AddConditionalFormat XLSX الموجودة تستمر في التصرف بنفس الطريقة.
  • القيود المعروفة: لم يتم إصدار ترميز لون السمة بعد؛ تجاوزات iconId لكل توقف في مجموعات الأيقونات غير مدعومة. التعرف على الجانب القارئ XLSX لقواعد شريط البيانات / تدرج الألوان / مجموعة الأيقونات الواردة من ملفات Excel المحفوظة يبقى مؤجلًا — فقط الكتابة موصولة في هذا الإصدار.

الإصدار 2.35.1

  • قارئ BIFF8 الآن يفك تشفير بايتات Differential XF (DXF) المرفقة بقاعدة CF12 مرة أخرى إلى property bag الخاص بـ TXLSDxfStyle الخاص بالقاعدة، بالإضافة إلى الاحتفاظ بالبايتات الخام في DxfBlob. تحميل مصنف محفوظ بواسطة Excel مع قواعد أشرطة بيانات / تدرج ألوان / مجموعات أيقونات منمقة يكشف الآن عن لون الخط وألوان التعبئة والعريض / المائل / التسطير ومعرّف تنسيق الأرقام مباشرةً عبر زوج HasXxx+القيمة على كل Rule.Style.
  • سلوك Round-trip: دورة load-edit-save تعكس الآن أي تعديل لـ Rule.Style بعد التحميل. إذا قام المستخدم بقراءة مصنف وتغيير Rule.Style.SetFontColor وحفظ، يفوز اللون الجديد؛ إذا لم يلمس المستخدم Style، يحمل الملف المحفوظ نفس التجاوزات مثل الأصلي.
  • يتم تخطي قيم xfPropType غير المعروفة في DXF blob بدلاً من رفضها، لذا فإن ملفات Excel الأحدث التي تستخدم أنواع خصائص لم يتم التعرف عليها بعد بواسطة هذا الإصدار لا تزال تُحمَّل (تظل البايتات الخام في DxfBlob للفحص أو دعم round-trip المستقبلي).

الإصدار 2.35.0

  • يمكن لقواعد التنسيق الشرطي الآن أن تحمل تجاوز نمط XF تفاضلي (DXF)، بحيث يمكن لقاعدة CF12 التي يتم تشغيلها في Excel أن تغير لون الخط والتعبئة وسماكة الخط والمائل والتسطير أو تنسيق الأرقام للخلية دون تغيير XF الأساسي للخلية. يتم عرض التجاوز كخاصية جديدة TXLSDxfStyle على كل TCondFormatRule، يمكن الوصول إليها بعد إنشاء قاعدة عبر واجهات برمجة التطبيقات الموجودة AddCondFormatDataBar / AddCondFormatColorScale* / AddCondFormatIconSet.
  • تجاوزات النمط المدعومة في هذا الإصدار: لون الخط، لون خلفية التعبئة، لون الخط الأمامي للتعبئة، نمط التعبئة، خط عريض، خط مائل، نمط تسطير الخط، ومعرّف تنسيق الأرقام المدمج. لكل خاصية علم HasXxx مقترن — يتم إصدار الخصائص التي تم تعيينها صراحةً عبر SetXxx فقط إلى ملف BIFF8.
  • يقوم كاتب BIFF8 الآن بإلحاق كتلة DXF غير فارغة بسجل CF12 كلما كان لـ Style القاعدة على الأقل تجاوز واحد معين. تستخدم كتلة DXF تخطيط مصفوفة XFProp العام (cxfp + tuples لكل خاصية من النوع / الحجم / البيانات)، مما يسمح لـ Excel بالتقاط تغييرات النمط عند تطبيق القاعدة.
  • يحافظ قارئ BIFF8 على بايتات DXF الخام من ملف محفوظ بواسطة Excel في خاصية DxfBlob للقاعدة، لذا فإن round-trip load-edit-save لم يعد يفقد بصمت نمط الخلية الذي تحمله قواعد CF12. تم التخطيط لفك تشفير البايتات الخام مرة أخرى إلى property bag الخاص بـ TXLSDxfStyle في إصدار متابعة.
  • السلوك الافتراضي لم يتغير للقواعد التي لم تختر نمطًا — يتم إصدار cbdxf = 0، مطابق لـ v2.34.0، لذا فإن قواعد شريط البيانات / تدرج الألوان / مجموعة الأيقونات الموجودة تُعرض تمامًا كما كانت من قبل.
  • القيود المعروفة: ترميز ألوان السمة لـ DXF غير مدعوم (RGB فقط)؛ تجاوزات الحدود ونقاط توقف التدرج ليست في مجموعة خصائص هذا الإصدار؛ ترتيب البايت لـ XFProp value blobs يتبع ملاحظات [MS-XLS] العامة وقد يتطلب تعديلات صغيرة للحصول على إخلاص round-trip كامل في Excel بمجرد التحقق منه باستخدام BiffView. تظل تكافؤ جانب XLSX لأنواع القواعد الجديدة الثلاثة مؤجلة.

الإصدار 2.34.0

  • واجهة برمجة تطبيقات عامة جديدة للتنسيق الشرطي على ورقة العمل لقواعد امتداد Excel 2007+: AddCondFormatDataBar و AddCondFormatColorScale2 و AddCondFormatColorScale3 و AddCondFormatIconSet. تقبل كل طريقة نطاق sqref مثل "A1:A10" بالإضافة إلى المعلمات الخاصة بالنوع (لون الشريط، ألوان نقاط التدرج، أو عائلة مجموعة الأيقونات) وتُرجع كائن القاعدة المُنشأ.
  • يقوم كاتب BIFF8 (.xls) الآن بإصدار سجلات CONDFMT12 / CF12 / CFEX المقابلة جنبًا إلى جنب مع سجلات CONDFMT / CF القائمة على قيمة الخلية الموجودة، بحيث تحتفظ المصنفات المُنشأة عبر واجهة برمجة التطبيقات الجديدة بقواعد شريط البيانات وسلم الألوان ثنائي / ثلاثي اللون ومجموعة الأيقونات على القرص.
  • يتعرف قارئ BIFF8 على سجلات CONDFMT12 / CF12 / CFEX الواردة ويعرضها من خلال نفس نموذج القواعد في الذاكرة، لذلك لم تعد ملفات .xls التي ينشئها Excel بقواعد الامتداد تُلغى بصمت عند التحميل.
  • كتالوج مجموعات الأيقونات المدمج يغطي مجموعات Excel 2007 السبع عشرة الأساسية (عائلات 3-أسهم / 3-أعلام / 3-إشارات مرور / 3-علامات / 3-رموز، 4-أسهم / 4-تقييمات / 4-إشارات مرور، و 5-أسهم / 5-تقييمات / 5-أرباع)، يمكن اختيارها من خلال تعداد TXLSIconSetType.
  • يمكن أن تكون أنواع العتبات لحدود شريط البيانات ونقاط توقف سلم الألوان / مجموعة الأيقونات أي من رقم أو الحد الأدنى / الأقصى للنطاق أو نسبة مئوية أو مئوي أو صيغة، متطابقة مع أنواع cfvo التي يستخدمها Excel.
  • سلوك التنسيق الشرطي لقيمة الخلية الموجود لم يتغير؛ تمت إضافة واجهات برمجة تطبيقات جديدة فقط ومعالجة سجلات BIFF8 جديدة.
  • القيود المعروفة في هذا الإصدار: مخرجات XLSX لأنواع القواعد الجديدة الثلاثة لم تُربط بعد (قواعد قيمة الخلية XLSX الموجودة غير متأثرة)؛ يتم إصدار كتلة نمط XF التفاضلي على CF12 فارغة، لذلك قد يقوم Excel بعرض الأشرطة والسلالم بألوان افتراضية بدلاً من الألوان التي توفرها واجهة برمجة التطبيقات؛ مصفوفات cfvo لكل توقف تحمل اللون فقط في CFEX، وليس مجموعة النوع / القيمة. هذه الفجوات مُخطط لها لإصدارات المتابعة v2.34.x / v2.35.x مع مصنف العرض التوضيحي والتحقق من العرض في Excel.

الإصدار 2.33.3

  • عرض توضيحي جديد XlsTables Delphi تحت Demo/Delphi/XlsTables/ يوضح جانب كتابة جداول BIFF8 (ListObjects) من البداية إلى النهاية. يقوم بإنشاء SalesTable.xls مع منطقة مبيعات من أربعة أعمدة (المنطقة / المنتج / الربع / الإيرادات) مرتبطة كجدول في A1:D10 باستخدام Sheet.AddTable('SalesTable', 'A1:D10', headers). افتح ملف .xls الناتج في Excel للتحقق من القوائم المنسدلة للأعمدة وخطوط الصفوف المتعرجة واسم المرجع المهيكل SalesTable في مربع الاسم.
  • العرض التوضيحي هو أقصر وصفة شاملة لاعتماد واجهة برمجة التطبيقات AddTable الخاصة بـ v2.33.0: تعيين StyleName = 'TableStyleMedium2' و ShowRowStripes = True، تعبئة تسعة صفوف بيانات + صف رأس واحد، وكتابة المصنف بمكالمة SaveAs واحدة. يذهب الإخراج بجانب الملف القابل للتنفيذ.
  • البنية التحتية للترجمة لم تتغير: يلتقط build-Win32-Demo.cmd الحالي XlsTables.dpr تلقائياً عبر مسح for /r Demo *.dpr — لا يلزم تغيير في برامج البناء النصية أو تكوينات .cbproj/.dproj.

الإصدار 2.33.2

  • الآن يقمع SaveAs الخاص بـ BIFF8 (.xls) سجلات AUTOFILTERINFO/AUTOFILTER المستقلة على مستوى الورقة ($009D / $009E) عندما يغطي جدول على نفس الورقة نطاق التصفية التلقائية بالكامل. يدمج Excel قائمة منسدلة للتصفية التلقائية داخل كائن الجدول نفسه، لذا فإن إصدار تصفية تلقائية إضافية على مستوى الورقة لنفس النطاق يُفعِّل التحقق من ملف Office لرفض الملف. يطابق هذا الإصلاح الإصلاح على جانب XLSX الذي تم شحنه في v2.29.4.
  • فحص التغطية محافظ: يُعتبر الجدول "يغطي" التصفية التلقائية فقط عندما تُحيط صفه الأول/الأخير وعموده الأول/الأخير بحدود التصفية التلقائية. التداخل الجزئي يحافظ على سلوك إصدار التصفية التلقائية على مستوى الورقة.
  • عمليات الحفظ BIFF5 وأوراق العمل بدون أي جدول لا تتأثر — يعمل فحص القمع فقط عندما يكون تنسيق الملف BIFF8 وتحتوي ورقة العمل على جدول واحد على الأقل. لا يوجد تغيير في واجهة برمجة التطبيقات العامة.

الإصدار 2.33.1

  • أصبح جانب قراءة BIFF8 (.xls) يتعرف الآن على سجلات الميزات المشتركة للجداول التي أضافها v2.33.0 على جانب الكتابة. عند فتح ملف .xls تم حفظه بواسطة Excel (أو HotXLS نفسه) ويحتوي على ListObjects/Tables، تُعبأ مجموعة Tables لورقة العمل الآن بـ TXLSTable لكل FEAT11 ($0872) تم تحليله: تُعاد بناء نطاق الجدول من Ref8U الأساسي، ويُستعاد معرّف الجدول واسمه واسم العرض عند توفرها، ويُعبأ اسم نمط الجدول من سجل LIST12 ($0877) المقترن. سابقاً كانت هذه السجلات تُتجاهل بصمت.
  • يتم الآن إرسال FEATHEADR ($0867) المشترك حسب حقل Isf بدلاً من إرساله دائماً إلى محلل الحماية. Isf=2 (الحماية المعززة) يحتفظ بالسلوك الحالي؛ Isf=4 (SharedList) يُعترف به كعلامة Tables على الورقة؛ Isf=3 (SmartTags) والقيم الأخرى تُتجاهل بأمان. FEATHEADR11 ($0871) يُعترف به أيضاً بصمت كعلامة Tables.
  • القارئ يبذل قصارى جهده ومتسامح: حمولات FEAT11 المشوهة أو متغيرات Excel تتراجع برشاقة إلى جدول يحتوي على الأقل على النطاق الصحيح للخلية. حماية الورقة round-trip غير متغيرة.

الإصدار 2.33.0

  • تدعم أوراق عمل BIFF8 (.xls) الآن كائنات الجداول (Excel ListObjects). استدعِ Worksheet.AddTable(Name, Range, Columns) على IXLSWorksheet لربط منطقة جدول مسمّاة بنطاق خلايا. يُرسِل مسار حفظ .xls الآن عائلة سجلات الميزات المشتركة BIFF8 التي تُعلِّم الورقة بأنها تحتوي على جداول: FEATHEADR ($0867 مع Isf=4) و FEATHEADR11 ($0871) و FEAT11 ($0872) + LIST12 ($0877) لكل جدول. سابقاً، AddTable لم تكن متوفرة على واجهة XLS؛ الجداول المعرَّفة على ورقة عمل كانت تُسقَط بصمت عند SaveAs(xlExcel97).
  • واجهة برمجة تطبيقات عامة جديدة على IXLSWorksheet: خاصية Tables: TXLSTables (مجموعة للقراءة فقط) وطريقة AddTable. الشكل يعكس TXLSXTable / TXLSXTables على جانب XLSX. يكشف TXLSTable عن Id و Name و DisplayName و Range و Columns و StyleName (الافتراضي 'TableStyleMedium2') و ShowFirstColumn و ShowLastColumn و ShowRowStripes (الافتراضي true) و ShowColumnStripes و TotalsRowShown.
  • تُرسَل سجلات تدفق الورقة الجديدة قبل EOF الورقة مباشرة، بعد حماية الورقة، فقط عندما يكون تنسيق الملف BIFF8 (xlExcel97). المصنفات بدون جداول تُحفظ تماماً كما من قبل — لا FEATHEADR يُرسَل، لا تغييرات في تدفق السجلات، لا تكلفة إضافية. حفوظات BIFF5 لا تتأثر.
  • تُخصَّص معرّفات الجداول تسلسلياً لكل ورقة (1..N) عند الحفظ إذا لم تُعيَّن مسبقاً. اسم النمط الافتراضي 'TableStyleMedium2' يطابق ما يستخدمه Excel وجانب XLSX بالفعل.
  • القيود المعروفة في هذا الإصدار الأولي (v2.33.0): لم يتم بعد إرسال صيغ صف الإجماليات والنطاقات المساعدة للمراجع الهيكلية؛ قمع التعارض بين AUTOFILTERINFO على مستوى الورقة ونطاق الجدول سيُضاف لاحقاً؛ جانب القراءة (تحليل .xls محفوظ من Excel يحتوي على جداول لإعادة تجميعها في مجموعة Tables) هو أيضاً متابعة.

الإصدار 2.32.1

  • تم إصلاح خطأ في التجميع أدخلته ميزة كتابة FILEPASS في الإصدار v2.32.0، والذي منع المكتبة من البناء على RAD Studio 12+ مع التحقق الصارم من النوع. صرح المساعد EncryptAllBlobs عن مخزن التشتت المؤقت كـ PByte في سياق يحل فيه PByte إلى الاسم المستعار المحلي في lxHandle، بينما توقع هدف الاستدعاء EncryptBlobData في lxEncrypter النوع lxBLOB.PByte. على الرغم من أن النوعين كلاهما يستعير ^Byte، يعاملهما Delphi كنوعين متميزين تحت التحقق الصارم E2010. تم الآن تأهيل متغير المخزن المؤقت بالكامل كـ lxBLOB.PByte، لذا يتم تجميع مسار تشفير كلمة المرور v2.32.0 بشكل نظيف عبر جميع إصدارات RAD Studio المدعومة (12.0–37.0).

الإصدار 2.32.0

  • تمت إضافة خاصية EncryptionPassword إلى IXLSWorkbook. تعيين كلمة مرور غير فارغة قبل SaveAs ينتج الآن ملف .xls محمي بكلمة مرور ومتوافق مع Excel: يطلب Excel وLibreOffice Calc وقراء BIFF8 الآخرون كلمة المرور عند الفتح ويرفضون الوصول عند الخطأ. سابقاً كان مُعيِّن كلمة المرور يُتجاهل بصمت على جانب الكتابة.
  • يصدر مسار الكتابة سجل BIFF8 FILEPASS ($002F) مباشرة بعد BOF المصنف ويشفر RC4 كل جسم سجل لاحق بنفس خوارزمية جانب القراءة (vMajor=1, vMinor=1 — تشفير "Office 97/2000 Compatible" من Excel). يُولَّد Salt وVerifier ذو 16 بايت عبر CryptGenRandom من Windows بدلاً من Random الخاص بـPascal. يتم الحفاظ على إعادة اشتقاق مفتاح الكتلة عند كل حد 1024 بايت.
  • التشفير ينطبق فقط على BIFF8 (xlExcel97)؛ يبقى مسار BIFF5 كنص عادي. تُبقي EncryptionPassword الفارغة سلوك النص العادي القديم (الافتراضي)، التطبيقات الحالية غير متأثرة.
  • جانب القراءة: تم إصلاح خلل خفي في ParseFilePass كان يجعل أول جسم سجل بعد FILEPASS (عادةً CODEPAGE) يُعامل كنص عادي. الملفات المشفرة المكتوبة بواسطة HotXLS الآن تعود إلى الحالة الأصلية بشكل صحيح عبر HotXLS.
  • ملاحظة أمان: يستخدم BIFF8 RC4 (vMajor=1/vMinor=1) مفتاحاً بطول 40 بت، ويعتبر مكسوراً وفق معايير 2025. استخدم هذه الميزة للتوافق مع واجهة حماية كلمة مرور Excel الكلاسيكية، وليس لسرية بيانات حساسة. للأمان الفعلي، يُفضّل XLSX + AES.

الإصدار 2.31.0

  • تمت إضافة خاصية UseSharedFormulas إلى IXLSWorkbook. عند تعيينها إلى True، يقوم SaveAs بصيغة BIFF8 بتجميع الخلايا التي تشترك في صيغة نموذج ضمن سجلات SHRFMLA الأصلية ($04BC)، بما يتوافق مع التنسيق المضغوط لـ Microsoft Excel. يتم تجميع أعمدة الصيغ مثل =A1*B1، =A2*B2، …، =A99*B99 تلقائياً، مما يُقلِّل حجم الملف بنسبة 30–60 % في الأوراق كثيفة صيغ النماذج.
  • يكون التجميع تنازلياً عبر الأعمدة، متجاوراً ومستنداً إلى النموذج: يُجمَّع فقط الخلايا الموجودة في نفس العمود بصفوف متتالية وصيغ PTG متكافئة. تُستثنى الخلايا ذات الصيغ المصفوفية أو علامات الدمج.
  • القيمة الافتراضية هي False، مما يُبقي إصدار سجلات FORMULA لكل خلية دون تغيير. للتفعيل، اضبط Workbook.UseSharedFormulas := True قبل استدعاء SaveAs.
  • لا يتأثر جانب القراءة. هذا إصدار MINOR (2.30.x → 2.31.0) لأنه تمت إضافة خاصية عامة جديدة ويتغير تنسيق إخراج BIFF8 عند تمكين الميزة.

الإصدار 2.30.6

  • تم إصلاح فئة رابعة من أخطاء التجميع في مشاريع العرض التوضيحي لـ C++Builder تحت مُجمِّع bcc32 المستند إلى clang في RAD Studio 37.0: كان نمط الفهرسة ->Borders[idx]->Prop على مؤشر ذكي لواجهة يُسبِّب الخطأ E5843 ("نوع مرجع العضو ليس مؤشراً"). تم تغيير جميع التكرارات إلى ->Borders->Item[idx]->Prop. يؤثر هذا الإصلاح على مشاريع ApiTour وExportWithColoring وPurchaseOrder وQuickStart ويُكمِل التوافق الكامل مع clang لجميع مشاريع العرض التوضيحي التسعة لـ C++Builder.

الإصدار 2.30.5

  • تُجمَّع الآن جميع مشاريع العرض التوضيحي التسعة لـ C++Builder بنجاح تحت مُجمِّع bcc32 المستند إلى clang في RAD Studio 37.0. تم إصلاح ثلاثة أنواع من أخطاء التجميع: تمت إعادة تسمية الخاصية EOF في lxFormula إلى IsEof لإزالة التعارض مع الماكرو C stdio.h؛ تم الآن تأهيل ثوابت تعداد API XLS (xlHAlignCenter وxlAround وxlMedium وغيرها) صراحةً بفضاء الاسم Lxhandle::؛ وتم تغيير إسناد قيم خلايا XLSX من OleVariant(...) إلى Variant(...) لأن نوع TXLSXCell.Value هو System::Variant ويرفض مُجمِّع clang التحويل الضمني من الفئة الأساسية المحمية OleVariant.

الإصدار 2.30.4

  • يدعم عرض OrderCalc التوضيحي (نموذج أمر الشراء لـ Delphi) الآن خيار التصدير بتنسيق XLSX إلى جانب تنسيقات XLS وHTML وRTF الحالية. عند تحديد «Excel 2007+ (*.xlsx)» في مربع حوار الحفظ، تُكتب أمر الشراء باستخدام واجهة TXLSXWorkbook الأصلية، مما ينتج مباشرةً ملف XLSX متوافقًا مع المعايير مع خطوط وتعبئات وحدود ومحاذاة وتنسيقات أرقام وصيغ Excel.

الإصدار 2.30.3

  • SaveXLSWorkbookAsXLSX (الجسر الذي تستخدمه TDataToXLS.SaveAs وTGridToXLS.SaveAs عندما ينتهي اسم الملف الهدف بـ .xlsx) يقوم الآن بنسخ ألوان تعبئة خلفية الخلايا، وألوان الخط، وسمات نمط الخط (الاسم والحجم والغامق والمائل) من مصنف XLS الأساسي إلى مخرجات XLSX. يتم أيضًا نسخ أعراض الأعمدة — بما في ذلك الأعمدة الزخرفية الضيقة المتعمدة. في السابق، كانت تُنقل القيم والتنسيقات الرقمية فقط، مما كان يجعل مخرجات XLSX بدون تنسيق، مع جميع أعراض الأعمدة عند القيمة الافتراضية، وأي عمود زخرفي ضيق يظهر كعمود فارغ كبير الحجم.

الإصدار 2.30.2

  • تم إصلاح خطأ round-trip في قارئ XLS حيث كان اتجاه Outline.SummaryRow ينعكس بعد Open. علامة fRwSumsBelow في سجل WSBOOL (مواصفات BIFF8 p278 byte 0 bit 6، القناع $0040) تعني "صفوف الملخص تظهر *تحت* التفاصيل"، لكن المحلل كان يضبط سابقًا SummaryRow = xlAbove عند تعيين البت (و xlBelow عند مسحه) -- بالضبط عكس المواصفة. كان جانب الكاتب صحيحًا بالفعل (يصدر $0040 لـ xlBelow)، لذا فإن فتح ملف Excel به "صفوف ملخص تحت التفاصيل" وإعادة حفظه عبر HotXLS كان يقلب اتجاه outline بصمت إلى "فوق". الآن يتطابق اتجاه التحليل مع المواصفة والكاتب، لذا تتم عمليات round-trip لتكوينات outline بشكل صحيح. fColSumsRight ($0080) كان يُعالج بشكل صحيح بالفعل ولم يتغير.

الإصدار 2.30.1

  • الآن يقوم كاتب XLS (BIFF8) بإصدار سجلات INTERFACEHDR / INTERFACEEND / WRITEACCESS في قسم globals من المصنف، مطابقًا التخطيط الأصلي لسجلات Microsoft Excel. يكتب Excel الأصلي دائمًا هذا الثلاثي بين CODEPAGE/DSF و WINDOW1، وقد تتوقع قارئات BIFF الأكثر صرامة / مسارات Office File Validation وجود ذلك. يحمل INTERFACEHDR صفحة الترميز (1200، UTF-16)، و INTERFACEEND هو علامة فارغة، و WRITEACCESS يحمل اسم المستخدم "تم الحفظ بواسطة" (مرمز حاليًا كـ "HotXLS"؛ قد يرقي إصدار مستقبلي ذلك إلى خاصية Workbook). ملفات XLS الناتجة الآن تطابق التخطيط الأصلي للبايتات في Excel بشكل أوثق.

الإصدار 2.30.0

  • تمت إضافة جسر تصدير من classic إلى XLSX. الآن تكتب TDataToXLS.SaveAs و TGridToXLS.SaveAs أسماء ملفات .xlsx عبر محرك XLSX مع الحفاظ على مسارات .xls و .html و .rtf الحالية دون تغيير.
  • تمت إضافة واجهات برمجة تطبيقات لعرض ورقة العمل لـ XLS و XLSX. تدعم IXLSWorksheet.View و TXLSXWorksheet.View العرض العادي ومعاينة فاصل الصفحات وعرض تخطيط الصفحة، ويتم الحفاظ على الإعداد بواسطة مسار الكاتب/القارئ المناسب للملف.
  • تمت إضافة واجهات برمجة تطبيقات توافق المصنف الكلاسيكي: IXLSWorkbook.SetCodePage و IXLSWorkbook.VBAProject. الآن يمكن فحص مشاريع VBA من خلال أسماء وحدات TXLSVBAProject/TXLSVBAModule والنص المصدر عندما يحتوي المصنف على تخزين VBA.
  • تم توسيع TXLSXWorkbook بـ ParsedVBAProject، وهو عرض تم تحليله للقراءة فقط على حمولة vbaProject.bin صالحة، مع الحفاظ على سلوك round-trip الحالي للبايتات الخام لـ VbaProject.
  • تمت إضافة وحدة cxGridAddExcel الاختيارية لتدفقات تصدير cxGrid الخاصة بـ DevExpress. لم يتم تضمينها عمدًا في الحزم الافتراضية بحيث تستمر التثبيتات بدون DevExpress في البناء بنظافة.
  • تم إصلاح عرض ورقة مخطط XLSX حيث ظهر المخطط فارغًا عند فتح المصنف في Excel (كانت ورقة مخطط مفتوحة حديثًا تعرض لفترة وجيزة 3 رموز سياق المخطط في الزاوية اليمنى العليا ثم تسقطها، تاركة الورقة فارغة). الآن تستخدم رسومات أوراق المخطط <xdr:absoluteAnchor> بامتداد صريح (~10in × 7.2in = 9525000 × 6858000 EMU) بدلاً من <xdr:twoCellAnchor> مع cx=0/cy=0؛ لا تحتوي أوراق المخطط على شبكة خلايا يمكن حل twoCellAnchor مقابلها، لذا كان Excel يعود إلى xfrm الداخلي بحجم صفر ويعرض المخطط بصفر بكسل. وفقًا لـ ECMA-376-1 14.2.3.2، يجب أن تستخدم رسومات أوراق المخطط absoluteAnchor. مراسي المخطط على أوراق العمل دون تغيير.

الإصدار 2.29.4

  • تم إصلاح خطأ في حزم XLSX كان يتسبب في ظهور رسالة إصلاح Excel "وجدنا مشكلة في بعض المحتوى في <file>.xlsx" في المصنفات حيث يغطي autoFilter على مستوى الورقة وجدول نفس النطاق (على سبيل المثال، ورقة Details في XlsxFeatureGallery.xlsx الخاصة بعرض MemoryDataExport، التي تستدعي AddTable('SalesTable', 'A1:F9', ...) متبوعة بـ SetAutoFilter('A1:F9')). يحظر OOXML آليتي تصفية على نفس النطاق؛ الآن يقمع الكاتب إصدار <autoFilter> المكرر على مستوى الورقة عندما يتزامن نطاقه مع نطاق أي جدول. لا يزال autoFilter الخاص بالجداول (المعروض كقوائم منسدلة في رأس الجدول) يعمل.
  • تم إصلاح انتهاك مخطط متعلق في مخرجات <dataValidation>: كان يتم إصدار سمة operator لكل تحقق، لكن ECMA-376-1 18.3.1.32 لا يسمح بها إلا لأنواع whole / decimal / date / time / textLength. يُنتج AddListValidation type="list"، الذي كان يُسرّب سابقًا operator="between"؛ OFV أكثر صرامة من Excel بشأن هذا وقد يرفض المصنف. الآن يتم حذف سمة operator لـ list / custom / none.
  • تم إصلاح عنصر <legacyDrawing r:id="..."/> على الأوراق التي تمزج بين الارتباطات التشعبية الداخلية والخارجية مع التعليقات (تحتوي ورقة Dashboard في XlsxFeatureGallery.xlsx على 1 داخلي + 1 خارجي + 1 تعليق). كان حساب rId يحسب جميع الارتباطات التشعبية بدلاً من الخارجية فقط (تستخدم الداخلية سمة location= المضمنة ولا تستهلك rId)، لذلك كان legacyDrawing يشير إلى هدف rels الخاص بالتعليقات بدلاً من هدف vmlDrawing. يتطلب ECMA-376-1 18.3.1.51 أن يشير legacyDrawing إلى rels من نوع vmlDrawing. الآن يُحسب rId من عدد الارتباطات التشعبية الخارجية فقط.
  • كما تم إيقاف إصدار ملف xl/worksheets/_rels/sheetN.xml.rels مكرر لأوراق الرسوم البيانية المضافة عبر AddChartSheet. كان ملف العلاقات المكرر يشير إلى جزء ورقة غير موجود ويظهر كيتيم داخل zip .xlsx؛ الآن تكتب أوراق الرسوم البيانية فقط xl/chartsheets/_rels/sheetN.xml.rels الصحيح.
  • تم تحديث عرض MemoryDataExport (XlsxFeatureGallery) لإسقاط استدعاء SetAutoFilter('A1:F9') المكرر على ورقة Details -- يُرفق AddTable بالفعل autoFilter بنطاق الجدول، لذا كان الاستدعاء الإضافي يُحفِّز سابقًا رفض OFV المذكور أعلاه. يغطي القمع الدفاعي للكاتب رمز العميل الذي لا يتلقى تحديث العرض.

الإصدار 2.29.3

  • تم إصلاح ارتداد round-trip XLSX حيث كانت الحدود المرسومة على الصفوف الفارغة بطريقة أخرى تُسقط بعد Open + modify + SaveAs. كان فاصل الصف 8 الأفقي في ApiTour (الذي يُنتج بواسطة استدعاء Range.SetBorders على صف بدون بيانات) يُعرض بشكل صحيح في ApiTour.xlsx المُنشأ حديثًا ولكنه كان يختفي في ApiTour-XLSX-Modified.xlsx بعد أن يعيد مسار Modify من العرض حفظ الملف، تاركًا Excel يعرض خط شبكة عمودي مكسور في C8 / D8 في الملف المعدل فقط (لم يتأثر ApiTour.xlsx الأصلي). الآن يطبق محلل XLSX أيضًا أنماط الخلايا عندما يكون عنصر `<c>` ذاتي الإغلاق أو ليس لديه أبناء value/formula، بحيث تنجو الخلايا ذات الأنماط بدون قيمة من round-trip.

الإصدار 2.29.2

  • تم إصلاح ارتداد round-trip XLSX في تدفقات Open + modify + SaveAs. عندما كان ParseWorksheetXml يقرأ خلية <c s="N"/> الخاصة بها تشير إلى cellXf في styles.xml، كان يخزن N مباشرة في cell.FormatIndex. في SaveAs، يُعاد بناء cellXfs من تجمعات أنماط المصنف (مع إدخالات مركبة اختيارية)، وفتحة التخطيط الجديد بنفس الفهرس الرقمي لا تحمل تقريبًا نفس الدلالة؛ كانت الخلية المعاد حفظها تنتهي بالإشارة إلى cellXf خاطئ -- أو خارج نهاية جدول cellXfs الجديد -- وكان Excel يبلغ "اكتشف Office مشكلة في هذا الملف. يمكننا محاولة استرداده". الآن يعيد ApplyStyle تعيين cellStyle إلى FontIndex / FillIndex / BorderIndex / NumberFormatIndex / AlignmentIndex / ProtectionIndex عبر جداول CellXfXxxMap التي يقوم ParseStylesXml بملئها بالفعل، لذا يعيد round-trip إصدار الخلية مقابل cellXfs المُنشأة حديثًا.

الإصدار 2.29.1

  • تم إصلاح ارتدادين في عرض XLSX كشفهما عرض ApiTour: (1) كان يمكن إصدار الخلايا داخل صف خارج ترتيب الأعمدة عندما يضيف استدعاء Range.SetBorders خلايا بترتيب غير رتيب (على سبيل المثال، يقوم مسار outline بإنشاء A8/C8، ويقوم مسار inside بإنشاء B8 -- كان الإخراج A8 / C8 / B8 / بدلاً من A8 / B8 / C8 / لذا كان Excel يبلغ "اكتشف Office مشكلة في هذا الملف" ويفرض Protected View). الآن يقوم كاتب XLSX بفرز خلايا كل صف حسب العمود قبل الإصدار، مطابقًا مخطط OOXML CT_Row. (2) كانت الخلايا التي تضبط 2 أو أكثر من فهارس الأنماط في وقت واحد (Font + Fill + Border، إلخ) تنهار إلى cellXf أحادي البعد عبر سلسلة أولوية (يفوز FontIndex، وتُلغى Border / Fill)، لذا على سبيل المثال، صف رأس مع FontIndex + FillIndex + BorderIndex مُعَين على Range[..].SetBorders كان يُعرض بدون الحدود. الآن يجمع الكاتب تجمعًا مركبًا من cellXf أثناء SaveAs ويوجه الخلايا متعددة الأبعاد إلى cellXf مركب يحافظ على كل بعد.

الإصدار 2.29.0

  • تمت إعادة تسمية وحدة المساعد الداخلية `lxList2` إلى `lxKeyList` وإعادة تسمية فئات مفتاح WideString لـ `lxList` من `TXLSKeyList` / `TXLSKeyEntry` / `TXLSKeyArray` إلى `TXLSStringKeyList` / `TXLSStringKeyEntry` / `TXLSStringKeyArray` بحيث يتطابق اسم الوحدة مع فئتها الرئيسية `TXLSObjectKeyList` وتكون جيلا key-list ذاتية الوصف (`TXLSStringKey*` لتجمع مفتاح WideString القديم، و `TXLSObjectKey*` لتجمع dedup المستند إلى THashtableKey). إذا كان رمزك يشير إلى اسم الوحدة القديم أو أسماء الفئات، فقم بتحديث جمل uses وأسماء الأنواع وفقًا لذلك.

الإصدار 2.28.3

  • تم إصلاح ارتداد إصدار خلايا XLSX الذي تسبب في اختفاء الحدود المعينة على الصفوف الفارغة بطريقة أخرى. كان `Range[''A3:C10''].SetBorders(xlsxEdgeOutline,...)` على ورقة لا يحمل صفها 8 أي بيانات يُعرض خط الشبكة العمودي C/D مكسورًا عبر ذلك الصف لأن الكاتب كان يتخطى أي خلية قيمتها Value غير مُعَينة -- حتى عندما يكون لدى الخلية BorderIndex / FontIndex / FillIndex / NumberFormatIndex / AlignmentIndex / ProtectionIndex مُعَين. الآن يصدر الكاتب `<c r='..' s='..' />` للخلايا بدون قيمة التي تحمل أي فهرس نمط.

الإصدار 2.28.2

  • تم إصلاح انتهاك مخطط ورقة عمل XLSX كان يتسبب في رفض Excel تحميل الأوراق التي تجمع بين الخلايا المدمجة و AutoFilter. الآن يصدر كاتب XLSX عنصر <autoFilter> قبل <mergeCells>، مطابقًا تسلسل OOXML CT_Worksheet (autoFilter هو #11، و mergeCells هو #15). سابقًا، كانت هذه المصنفات تُحفِّز مربع حوار إصلاح Excel مع `Load error. Line 1, column 0` في sheet1.xml وكان الاسترداد يُسقط أيضًا tableParts / autoFilter من أوراق Details الشقيقة.

الإصدار 2.28.1

  • تمت إضافة واجهات برمجة تطبيقات (APIs) جديدة لتسهيل الاستخدام في الواجهة الأمامية الكلاسيكية لـ XLS. الآن، تعرض IXLSRange خصائص Width و WidthInPixels للقراءة فقط، بالإضافة إلى SaveAsCSV(FileName). تعرض IXLSWorksheet و IXLSWorkbook الآن دوال SaveAsCSV(FileName / Stream) للنطاق المستخدم أو الورقة النشطة. تعرض IXLSPageSetup الآن الخيارات Order و Draft و BlackAndWhite و PrintNotes، بالإضافة إلى الخاصية IsFitToPages للقراءة فقط. الآن، عند حفظ/فتح سجل SETUP، يتم الحفاظ على علامات الطباعة هذه.

الإصدار 2.28.0

  • تمت إضافة تصدير RTF لـ TXLSXWorkbook. الدوال الجديدة SaveAsRTF (FileName / Stream x الورقة النشطة الافتراضية / فهرس الورقة المحدد) تكتب الورقة المحددة كمستند RTF 1.6 يحتوي على جدول بسيط. يتم اشتقاق عرض الأعمدة من بيانات ColWidth الخاصة بالورقة (يتم تقريب وحدة حرف Excel الواحدة إلى 96 RTF twips). إذا لم يتم تحديد عرض للأعمدة، فسيتم استخدام StandardWidth إذا تم تعيينه، وإلا سيتم استخدام 809 twips (~8.43 أحرف). يتم تطبيق التنسيق لكل خلية (غامق باستخدام \\b، ومائل باستخدام \\i، وحجم الخط باستخدام \\fsN بوحدات النصف) من FontIndex الخاص بالخلية. يتم ترميز الأحرف غير ASCII باستخدام تسلسلات RTF \\uN? unicode الموقعة ذات 16 بت وفقًا لـ RTF 1.6 §2.4.2، والتي تغطي النطاق الكامل لـ BMP. الخلايا المدمجة لا تمتد - تحمل الخلايا الأصلية المحتوى، ويتم إخراج الخلايا الأخرى داخل النطاق كخلايا فارغة. يكتب فهرس الورقة الافتراضي الورقة النشطة؛ وتعيد القيمة -1 إذا كان خارج النطاق. تنتج الأوراق الفارغة مستند RTF صالحًا بسيطًا.

الإصدار 2.27.0

  • تمت إضافة تصدير HTML لـ TXLSXWorkbook. الدوال الجديدة SaveAsHTML (FileName / Stream x الورقة النشطة الافتراضية / فهرس الورقة المحدد) تكتب الورقة المحددة كمستند HTML بترميز UTF-8 مع BOM الخاص بـ UTF-8. الإخراج عبارة عن جدول <table> واحد داخل صفحة HTML بسيطة. يتم التعبير عن الخلايا المدمجة باستخدام سمات colspan و rowspan. يتم إخراج تنسيق الخلية كـ CSS مضمن: نوع الخط، والحجم (بالنقاط)، والخط الغامق (font-weight:bold)، والمائل (font-style:italic)، والخط المتقاطع (text-decoration:line-through)، ولون الخط المحدد. يتم استخدام لون التعبئة الصلبة كـ background-color. يتم تحديد المحاذاة الأفقية (يسار/منتصف/يمين/تبرير) و WrapText (white-space:pre-wrap). يتم عرض قيم التواريخ كـ 'yyyy-mm-dd hh:nn:ss'. يتم تسطيح الخلايا النصية الغنية إلى النص المجمع الخاص بها. يتم تجاهل ألوان الموضوع بصمت (لا يتم حل theme1.xml في تصدير HTML البسيط). يكتب فهرس الورقة الافتراضي الورقة النشطة؛ وتعيد القيمة -1 إذا كان خارج النطاق.

الإصدار 2.26.0

  • تمت إضافة دعم للألوان ذات الطابع الموضوعي والألوان المفهرسة والتدرجات/الظلال في TXLSXFont و TXLSXFill و TXLSXBorderEdge. تحتوي كل فتحة لون الآن على ثلاثة حقول جديدة بالإضافة إلى حقل RGB Color الحالي: ColorTheme (عدد صحيح؛ -1 = غير معين؛ 0..11 = فتحة طابع موضوعي OOXML)، و ColorIndex (عدد صحيح؛ -1 = غير معين؛ 0..63 = فتحة لوحة ألوان OOXML القديمة - تتوافق مع Workbook.IndexedColor[N] و XlsxDefaultIndexedPalette)، و TintAndShade (رقم عشري في النطاق [-1.0, 1.0]؛ يتم إصداره فقط مع الطابع الموضوعي). تعرض TXLSXFill إصدارات Foreground و Background لجميع الحقول الثلاثة. ترتيب الأولوية: طابع موضوعي > مفهرس > RGB؛ لا تزال المسار القديم "ColorIsAuto = True" يمنع إخراج العنصر تمامًا. عند الحفظ باسم وفتح الملف، يتم حفظ جميع مجموعات السمات الكاملة <color theme="N" tint="..."/> و <color indexed="N"/> على ألوان الخط/التعبئة/الحد. في سياق العمليات الداخلية، TXLSXBorders.LookupOrAdd تقارن الآن جميع الحقول الثلاثة الجديدة بحيث لا تتداخل الحدود ذات الألوان ذات الطابع الموضوعي مع إدخالات الألوان ذات قيم RGB في المجموعة.

الإصدار 2.25.0

  • تمت إضافة دعم لربط ملف عمل خارجي عند الحفظ والفتح في TXLSXWorkbook. أنواع جديدة: TXLSXExternalLink (عنوان URL المستهدف + قائمة بأسماء الأوراق) + مجموعة TXLSXExternalLinks. تعرض الخاصية TXLSXWorkbook.ExternalLinks المجموعة؛ تقوم الدالة Add(Target) بإضافة رابط جديد ويقوم المتصل بملئه. عند الحفظ باسم، يتم إخراج كتلة <externalReferences> على مستوى ملف العمل في xl/workbook.xml، وعلاقة externalLink في xl/_rels/workbook.xml.rels (في نهاية نطاق rids بحيث تظل rids الحالية مستقرة)، وملف xl/externalLinks/externalLink{N}.xml لكل إدخال (<externalBook><sheetNames>) وملف .rels المقابل الذي يشير إلى عنوان URL لملف العمل البعيد مع TargetMode="External"، بالإضافة إلى تجاوزات ContentType المطابقة. عند الفتح، يتم فحص externalLink{N}.xml و .rels بدءًا من الفهرس 1 ويتوقف عند أول فجوة. الإصدار الحالي يدعم فقط عنوان URL المستهدف وقائمة أسماء الأوراق؛ لا يتم الحفاظ على قيم الخلايا المخزنة مؤقتًا داخل <sheetDataSet>.

الإصدار 2.24.0

  • تمت إضافة أداة مساعدة لإنشاء حدود TXLSXRange.SetBorders. تم إضافة تعداد TXLSXBorderEdgeKind جديد (xlsxEdgeAll / Outline / Inside / InsideHorizontal / InsideVertical / Top / Bottom / Left / Right / DiagonalUp / DiagonalDown) لتحديد الحواف التي سيتم كتابتها. تقوم الدالة SetBorders(Kind, Style, Color) / SetBorders(Kind, Style) (افتراضيًا، أسود معتم) بتكرار كل خلية في النطاق، وحساب قناع الحافة لكل موضع خلية (تحصل الخلايا الموجودة في الزوايا على حافتين خارجية، وتحصل الخلايا الموجودة على الحواف على حافة واحدة، وتحصل الخلايا الداخلية على خطوط شبكة داخلية)، ثم تقوم بدمج النمط واللون في نسخة من الحدود الحالية للخلية (بحيث تتراكم استدعاءات Outline + Inside بدلاً من الكتابة فوقها)، ثم تقوم بإجراء بحث أو إضافة على مستوى المصنف في Workbook.Borders، وكتابة فهرس الحدود الناتج (يبدأ من 1) مرة أخرى في الخلية. تقوم الدالة المساعدة الجديدة TXLSXBorders.LookupOrAdd بإرجاع 0 للحدود الفارغة بحيث لا تتضخم المجموعة بإدخالات غير ضرورية.

الإصدار 2.23.0

  • تمت إضافة عمليات تحميل زائدة لتصدير CSV في TXLSXWorkbook. نقاط دخول جديدة: SaveAsCSV(FileName) / SaveAsCSV(FileName, SheetIndex, Delimiter) / SaveAsCSV(Stream) / SaveAsCSV(Stream, SheetIndex, Delimiter) تقوم بكتابة الجزء المملوء من الورقة المحددة بتنسيق UTF-8 مع BOM (Byte Order Mark) وبنهايات أسطر CRLF. تختار الإصدارات الافتراضية الورقة النشطة وعلامة الفاصلة كفاصل؛ تقبل الإصدارات التي تحتوي على SheetIndex/Delimiter أي حرف واسع (عادةً علامة الجدولة #9 لـ TSV). يتبع اقتباس الحقول RFC 4180 - يتم تغليف القيم التي تحتوي على الفاصل أو علامة الاقتباس المزدوجة أو CR أو LF في علامات اقتباس، مع مضاعفة علامات الاقتباس المضمنة. يتم عرض قيم التاريخ بتنسيق 'yyyy-mm-dd hh:nn:ss'; يتم تسطيح الخلايا النصية الغنية إلى النص المدمج للتسلسل؛ يتم عرض الخلايا الفارغة في الجزء الداخلي من المستطيل المحيط كفواصل فقط، ويتوقف الصف عند آخر عمود مملوء.

الإصدار 2.22.0

  • تمت إضافة تجاوزات لقائمة الألوان ذات الفهرس على مستوى المصنف في TXLSXWorkbook. نقاط دخول جديدة: IndexedColor[Index: Integer]: LongWord (قراءة/كتابة، الفهارس الصالحة هي 0..63، LongWord بتنسيق ARGB)، HasCustomIndexedColor(Index): Boolean (تقوم بالإبلاغ عما إذا كان المتصل قد قام بتجاوز فتحة)، CustomIndexedColorCount: Integer (عدد الفتحات التي تم تجاوزها؛ 0 = تصدر اللوحة كافتراضية)، ResetIndexedColors: إجراء (تجاهل كل تجاوز). يكشف الثابت الجديد XlsxDefaultIndexedPalette عن لوحة ECMA-376 القديمة لـ OOXML للفهارس 0..63. عند الحفظ، يتم إصدار <colors><indexedColors> مع جميع عناصر <rgbColor> الـ 64 الفرعية فقط عندما تم تجاوز فتحة واحدة على الأقل؛ تعود الفتحات التي لم يتم تغييرها إلى اللوحة الافتراضية، بحيث تظل الملفات المحفوظة دون تغيير نظيفة. يقوم البرنامج المفتوح بتحليل الكتلة ويتجاهل الفتحات التي تتطابق قيمتها مع القيمة الافتراضية بحيث تظل عمليات الانتقال سلسة. يتم تجاهل عمليات التعيين للفتحات خارج النطاق (< 0 أو > 63) بدلاً من إثارة استثناء.

الإصدار 2.21.0

  • تمت إضافة ست خصائص لعرض الورقة في TXLSXWorksheet: Zoom: عدد صحيح يمثل نسبة التكبير المعروضة في شريط حالة Excel (من 10 إلى 400، الافتراضي 100؛ القيم خارج النطاق يتم تقييدها عند الكتابة). DisplayGridLines / DisplayZeros: قيمة منطقية (الافتراضي True) لإخفاء خطوط الشبكة في الخلايا أو عرض الخلايا التي تحتوي على قيم صفرية على أنها فارغة عند تعيينها إلى False. DisplayRightToLeft: قيمة منطقية (الافتراضي False) لقلب الورقة إلى تخطيط من اليمين إلى اليسار للغة العربية / العبرية / إلخ. StandardWidth / StandardHeight: رقم عشري لتعيين عرض العمود الافتراضي (وحدات أحرف Excel) / ارتفاع الصف الافتراضي (نقاط)؛ 0 = غير معين، وفي هذه الحالة يستخدم Excel القيم الافتراضية المدمجة وهي 8.43 / 15. تقوم SaveAs بإخراج `<sheetView showGridLines / showZeros / rightToLeft / zoomScale>` و `<sheetFormatPr defaultColWidth / defaultRowHeight>` فقط عندما تختلف القيم عن الإعدادات الافتراضية في Excel؛ يقوم Open بتحليلها مرة أخرى. معالجة تجميد اللوحة الحالية وتحديد التبويب في `<sheetView>` لم تتغير وهي الآن تستخدم نفس وحدة الإخراج.

الإصدار 2.20.7

  • تمت إضافة عمليات تحميل زائدة لـ TStream على TXLSXWorkbook للتسلسل في الذاكرة. نقاط دخول جديدة: SaveAs(Stream: TStream) / SaveAs(Stream: TStream; FileFormat: TXLSXFileFormat) تكتب حزمة .xlsx بأكملها في الدفق المحدد بدءًا من الموضع الحالي؛ Open(Stream: TStream) تقرأها مرة أخرى. المالك هو المستدعي ويجب عليه تحرير الدفق. مفيد للاستجابات HTTP، وتخزين الكائنات الثنائية (blobs)، والأنابيب في الذاكرة، واختبارات الوحدة التي تتجاوز نظام الملفات المحلي. تجاوزات SaveAs / Open المستندة إلى الملف الحالية لم تتغير وهي الآن تفوض إلى نفس المساعدات الداخلية للكتابة / القراءة.

الإصدار 2.20.6

  • تمت إضافة خصائص Hidden / Visible / Comment إلى TXLSXDefinedName. Hidden يطابق سمة OOXML `<definedName hidden="1"/>` (الافتراضي False / Visible=True؛ True يخفي الاسم من واجهة مستخدم "إدارة الأسماء" في Excel). Visible هو اسم مستعار منطقي (عكس Hidden) لرمز استدعاء أكثر وضوحًا. Comment يطابق `<definedName comment="..."/>`. تقوم SaveAs بإخراج كلا السمتين عندما تختلف عن الإعدادات الافتراضية؛ يقوم Open بتحليلها مرة أخرى. SheetIndex (الربط الحالي للنطاق المحلي عبر localSheetId) لم يتغير.

الإصدار 2.20.5

  • تمت إضافة خمسة خصائص إضافية للخط إلى TXLSXFont. تم إضافة enum جديد TXLSXFontVertAlign (xlsxVertAlignBaseline / Superscript / Subscript) والذي يتحكم في مربعات الاختيار "Superscript" / "Subscript" الموجودة في Excel من خلال خاصية VertAlign واحدة (تستبعد بعضها البعض في واجهة المستخدم). تمت إضافة خصائص OutlineFont و Shadow الجديدة للتأثيرات المطابقة للخط في Excel. تمت إضافة Integer Family (رقم عائلة الخط في OOXML: 1=Roman / 2=Swiss / 3=Modern / 4=Script / 5=Decorative; 0=غير محدد) و CharSet (رقم مجموعة الأحرف GDI: 0=ANSI / 1=Default / 134=GB2312 / 136=ChineseBig5 / إلخ.; -1=غير محدد). تقوم الدالة SaveAs بإخراج العناصر الفرعية المطابقة <vertAlign> / <outline/> / <shadow/> / <family> / <charset> داخل <font>; وتقوم الدالة Open بتحليلها مرة أخرى. تم تأجيل ColorIndex / ThemeColor / TintAndShade للإصدار المستقبلي الخاص بالموضوع.

الإصدار 2.20.4

  • تمت إضافة مفاتيح تبديل اتجاه الخط المائل للحدود. الآن، TXLSXBorder تعرض DiagonalUp: Boolean و DiagonalDown: Boolean. تشترك العلامتان في نمط ولون الحافة المائلة الموجودة، وتحدد أي اتجاه(ات) مائلة سيقوم Excel بعرضها - فقط للأعلى (من الأسفل الأيسر إلى الأعلى الأيمن)، فقط للأسفل (من الأعلى الأيسر إلى الأسفل الأيمن)، أو كلاهما. تقوم الدالة SaveAs بإخراج سمات diagonalUp / diagonalDown على عنصر <border> عند تعيينها؛ وتقوم الدالة Open بتحليلها مرة أخرى. في السابق، كانت المحرك تكتب حافة مائلة واحدة بدون تحكم في الاتجاه، لذلك لم يرسم Excel أيًا من الخطوط المائلة.

الإصدار 2.20.3

  • تمت إضافة مفتاح تبديل Date1904 على مستوى المستند. الآن، TXLSXWorkbook تعرض خاصية Date1904: Boolean لاختيار ما بين حقبة Windows لعام 1900 (افتراضي؛ يطابق Excel لنظام Windows) وحقبة Mac لعام 1904 (إصدار Excel لنظام Mac القديم). تقوم الدالة SaveAs بإخراج <workbookPr date1904="1"/> في ملف xl/workbook.xml عند تعيينها؛ وتقوم الدالة Open بقراءتها مرة أخرى. هذه العلامة هي بيانات وصفية فقط - لا يقوم المحرك بتحويل الأرقام المخزنة؛ يجب على المستخدمين تعيين Date1904 قبل تعيين قيم TDateTime للخلايا بحيث يكون التحويل ثنائي الاتجاه صحيحًا.

الإصدار 2.20.2

  • تمت إضافة دعم لمعايير التصفية التلقائية لكل عمود. أنواع جديدة: TXLSXAutoFilterOp (يساوي / لا يساوي / أكبر من / أصغر من / أكبر من أو يساوي / أصغر من أو يساوي)، TXLSXAutoFilterColumn (معرف العمود + 1 أو 2 معايير + موصل AND/OR)، TXLSXAutoFilterColumns. تعرض TXLSXWorksheet الخاصية AutoFilterColumns وطرق الإضافة AddAutoFilterColumn(ColId, Op, Criteria) / AddAutoFilterColumn(ColId, Op1, Criteria1, Op2, Criteria2, AndConnector) / ClearAutoFilterColumns. تقوم SaveAs بتوسيع العلامة <autoFilter ref="..."/> الحالية إلى جزء يحتوي على <filterColumn colId=N><customFilters and=0|1><customFilter operator="..." val="..."/>...</customFilters></filterColumn> لكل عمود عند تحديد المعايير؛ تقوم Open بتحليل نفس الهيكل مرة أخرى. سابقًا، كان المحرك يخزن نطاق التصفية التلقائية (sqref) فقط، وكان Excel يعرض قوائم منسدلة فارغة للتصفية.

الإصدار 2.20.1

  • تمت إضافة دعم لفاصل الصفحات اليدوي على TXLSXWorksheet. إضافات جديدة: AddRowBreak(BeforeRow) / AddColBreak(BeforeCol) لإدراج فاصل صفحة أفقي أو رأسي قبل صف أو عمود معين (بمعنى "قبل" في واجهة مستخدم Excel - يبدأ الصف رقم N صفحة جديدة). تحقق من وجود HasRowBreak / HasColBreak؛ قم بإزالة RemoveRowBreak / RemoveColBreak لإزالة إدخال واحد؛ قم بمسح ClearRowBreaks / ClearColBreaks / ClearAllPageBreaks بشكل جماعي. تعرض RowBreakCount / ColBreakCount بالإضافة إلى RowBreaks(Index) / ColBreaks(Index) ذات الفهرس "Before" المستخدمة في التكرار. تقوم SaveAs بإخراج <rowBreaks> / <colBreaks> مع عناصر فرعية <brk id="N-1" max="..." man="1"/> بين <headerFooter> و <drawing>؛ تقوم Open بتحليلها مرة أخرى.

الإصدار 2.20.0

  • تمت إضافة دعم لإمكانية رؤية الورقة (مخفية / مخفية جدًا)، والتحديد لكل ورقة، وتتبع الورقة النشطة على TXLSXWorkbook / TXLSXSheets / TXLSXWorksheet. أنواع جديدة: TXLSXSheetVisibility (xlsxSheetVisible / xlsxSheetHidden / xlsxSheetVeryHidden). خصائص جديدة في TXLSXWorksheet: Visibility، Visible (لقب منطقي Boolean)، IsSelected (للقراءة فقط). أعضاء جدد في TXLSXSheets: ActiveIndex، Activate(Index)، Move(FromIndex, ToIndex). تم إنشاء TXLSXWorkbook.ActiveSheet كبديل. تقوم SaveAs بإخراج <sheet state="..."/> في إدخالات الورقة في المصنف، و <bookViews><workbookView activeTab=N/></bookViews> عندما لا تكون الورقة النشطة هي الافتراضية 0، و tabSelected="1" في <sheetView> للورقة النشطة؛ تقوم Open بتحليل كل هذه العناصر مرة أخرى إلى الخصائص الجديدة. تصبح الورقة الأولى المضافة مرئية ونشطة افتراضيًا بحيث تستمر مواقع الاستدعاء الحالية في العمل.

الإصدار 2.19.2

  • تمت إضافة أربعة مفاتيح إضافية للتحكم في خصائص الصفحة في TXLSXWorksheet لتغطية كاملة لعناصر OOXML `<pageSetup>`: BlackAndWhite (عرض بالأبيض والأسود)، Draft (إخفاء الرسومات للحصول على معاينة أسرع)، PrintNotes (طباعة التعليقات الموجودة في الخلايا بدلاً من إخفائها)، و PrintOverThenDown (بدء الطباعة من اليسار إلى اليمين بدلاً من الترتيب الافتراضي من الأعلى إلى الأسفل). تقوم الدالة SaveAs بإخراج السمات المطابقة blackAndWhite / draft / cellComments / pageOrder؛ وتقوم الدالة Open بتحليلها مرة أخرى. الإعدادات الافتراضية تبقى معطلة بحيث لا تكتسب أوراق العمل التي لم تتغير أي سمات إضافية.

الإصدار 2.19.1

  • تمت إضافة خصائص ملائمة للرأس والتذييل المكونة من ثلاثة أجزاء إلى TXLSXWorksheet. الإضافات الجديدة: LeftHeader / CenterHeader / RightHeader و LeftFooter / CenterFooter / RightFooter. كل منها يقرأ أو يكتب الجزء المطابق &L / &C / &R من السلسلة النصية الأولية HeaderText / FooterText؛ وعند كتابة أي جزء، يتم إعادة بناء السلسلة النصية الأولية بالكامل بحيث تظل وظائف الكتابة والقراءة تعمل دون تغيير.
  • تمت إضافة خيارات الطباعة لتحديد إخراج الصفحة على مستوى الورقة. الإضافات الجديدة في TXLSXWorksheet: CenterHorizontally, CenterVertically, PrintGridlines, PrintHeadings. تقوم الدالة SaveAs بإخراج عنصر `<printOptions horizontalCentered / verticalCentered / gridLines / headings/>` عندما يتم تمكين أي من هذه الخيارات الأربعة؛ وتقوم الدالة Open بتحليل هذه السمات مرة أخرى. الإعدادات الافتراضية تبقى معطلة بحيث لا تكتسب أوراق العمل التي لم تتغير أي عنصر `<printOptions/>` إضافي.
  • تمت إضافة دعم كامل لعمليات الطباعة للمناطق المحددة، وأسطر وعمود العناوين لكل ورقة. هذه الخصائص تتوافق مع الأسماء المعرفة المضمنة على مستوى المصنف في OOXML وهما _xlnm.Print_Area و _xlnم.Print_Titles، وتُعرَّف باستخدام localSheetId. تأخذ PrintArea مرجعًا بسيطًا من نوع A1 (مثل "$A$1:$D$10")؛ بينما تأخذ PrintTitleRows و PrintTitleCols مراجعًا للصفوف فقط أو الأعمدة فقط (مثل "$1:$3" أو "$A:$B") وتدمجها في إدخال Print_Titles واحد. يقوم برنامج الكتابة بإضافة اسم الورقة مع علامات اقتباس مناسبة (علامات اقتباس مفردة حول الأسماء التي تحتوي على مسافات أو أحرف خاصة)؛ ويقوم برنامج القراءة بإزالة البادئة وإعادة توجيه الإدخالات إلى الورقة المطابقة بحيث لا تتسرب إلى المجموعة user-facing TXLSXWorkbook.DefinedNames.

الإصدار 2.19.0

  • تمت إضافة عمليات إدراج وحذف للصفوف والأعمدة مع إزاحة كاملة على مستوى الورقة في TXLSXWorksheet. الإضافات الجديدة: InsertRows(BeforeRow, Count)، DeleteRows(StartRow, Count)، InsertCols(BeforeCol, Count)، DeleteCols(StartCol, Count). تقوم الدالتان InsertRows / InsertCols بإزاحة الصفوف / الأعمدة الموجودة للخلف بمقدار Count؛ بينما تقوم الدالتان DeleteRows / DeleteCols بحذف النطاق [Start، Start+Count-1] وسحب كل شيء بعد النطاق للخلف بمقدار Count.
  • التغيير يطبق على كل جزء من أجزاء هندسة ورقة العمل التي تعتمد على موضع الصف/العمود: نقاط تثبيت الخلايا (Cells)، زوايا الخلايا المدمجة (MergedCells - النطاقات المتقاطعة يتم اقتصاصها إلى الحواف المتبقية، والنطاقات الداخلية فقط يتم إزالتها)، قوائم بيانات الصف/العمود (FRowHeights / FColWidths / مستويات التخطيط / مخفي / مطوي)، نقاط تثبيت الارتباطات التشعبية والملاحظات (المدخلات الموجودة داخل الشريط المحذوف يتم إزالتها)، تجميد اللوحة (FFreezeRow / FFreezeCol)، نطاق عامل التصفية التلقائي (AutoFilterRange)، والسلسلة النصية الخاصة بالنطاق لكل إدخال في كل من التنسيق الشرطي، والتحقق من صحة البيانات، وجداول Excel (يتم إزالة الإدخال الذي يقع نطاقه بالكامل داخل الجزء المحذوف).
  • تمت إضافة أعضاء Delete(Index) جديدة في المجموعات الداعمة حتى تتمكن منطق الإزاحة من إزالة إدخال واحد دون الحاجة إلى مسح: TXLSXHyperlinks, TXLSXComments, TXLSXConditionalFormats, TXLSXDataValidations, TXLSXTables.
  • خارج نطاق الإصدار الحالي: الصور والرسوم البيانية لم يتم إزاحتها (تؤدي نقاط تثبيتها بالبكسل EMU إلى فصلها عن شبكة الخلايا، ويتطلب الإزاحة الدقيقة إعادة حساب إزاحات EMU); صيغ الأسماء المعرفة على مستوى المصنف لم يتم إعادة كتابتها. كلاهما مدرجان في إصدار مستقبلي.

الإصدار 2.18.2

  • تمت إضافة أدوات مساعدة لتعديل عرض الأعمدة وارتفاع الصفوف. تعرض TXLSXWorksheet وظائف AutoFitColumn(ACol) / AutoFitColumns(ColMin, ColMax) و AutoFitRow(ARow) / AutoFitRows(RowMin, RowMax); تعرض TXLSXRange وظائف AutoFitColumns و AutoFitRows التي تمرر البيانات إلى ورقة العمل ضمن حدود النطاق. يتم تقدير العرض بوحدات أحرف Excel (Calibri 11pt baseline؛ يتم احتساب أحرف ASCII بواحدة، ويتم احتساب أحرف CJK باثنين) مع تصحيح 1.20 بكسل لكل حرف و 1.0 من المساحة، ويتم تقييدها بين [8.43، 255.0]. يمثل الارتفاع الافتراضي للصف 15 نقطة، ويزداد بمقدار 12.75 نقطة لكل سطر جديد مضمن في نص الخلية. يتم تقييد النطاقات الواسعة (EntireRow / EntireColumn) إلى آخر صف/عمود يحتوي على خلية في ورقة العمل بحيث لا تتكرر وظيفة AutoFit حتى حدود شبكة Excel.

الإصدار 2.18.1

  • تمت إضافة حماية على مستوى الخلية ذهابًا وإيابًا إلى محرك XLSX. تعرض TXLSXCell خصائص جديدة ومريحة Locked: Boolean (الافتراضي True) و FormulaHidden: Boolean (الافتراضي False) تعكس نموذج حماية الخلية في Excel. تعرض فهرس المجموعة TXLSXCell.ProtectionIndex (يبدأ من 1 في مجموعة TXLSXProtections الجديدة على مستوى المصنف). يؤدي الكتابة إلى الخاصية المريحة إلى البحث عن الزوج (Locked, FormulaHidden) في المجموعة أو إضافته. القيم الافتراضية (Locked=True, FormulaHidden=False) تؤدي إلى ProtectionIndex=0 بحيث تظل المجموعة فارغة للخلايا القياسية.
  • تمت إضافة أدوات مساعدة مجمعة لـ `TXLSXRange.SetLocked(ALocked)` و `TXLSXRange.SetFormulaHidden(AHidden)` بحيث يؤدي إلغاء قفل أو إخفاء نطاق كامل إلى عملية بحث أو إضافة واحدة فقط في الذاكرة، وتطبيق النتيجة على كل خلية في المستطيل.
  • تمت إضافة البنية التحتية المقابلة للقراءة والكتابة. تقوم `SaveAs` بإخراج عنصر `cellXf` واحد مع عنصر فرعي مضمن `<protection locked="N" hidden="M"/>` لكل إدخال `Protections` في مصنف Excel، (بعد كتلة المحاذاة). يقوم `Open` بتحليل `<protection>` مرة أخرى إلى `Workbook.Protections` وينقل `CellXfProtMap` الجديد عبر `ParseStylesXml` و `ParseWorksheetXml` بحيث يتم الحفاظ على فهرس الحماية لكل خلية جنبًا إلى جنب مع الفهارس الحالية للخط والملء والحد والنمط العددي والمحاذاة.

الإصدار 2.18.0

  • تمت إضافة كائن `TXLSXRange` للوصول إلى الخلايا المتعددة والعمليات المجمعة على `TXLSXWorksheet`. نقاط دخول جديدة: `Worksheet.Range['A1:C5']`، `Worksheet.RCRange[r1,c1,r2,c2]`، `Worksheet.UsedRange`، `Worksheet.EntireRow(r)`، `Worksheet.EntireColumn(c)`. يعرض النطاق الذي تم إرجاعه `SetValue` / `SetFormula` / `Clear` / `ClearAll` / `Merge` / `Unmerge` / `Offset` / `Resize` بالإضافة إلى أدوات تعيين فهرس النمط لكل خلية (`SetFontIndex` / `SetFillIndex` / `SetBorderIndex` / `SetNumberFormatIndex` / `SetAlignmentIndex`) و `SetNumberFormat(Fmt)` وهي طريقة ملائمة تبحث عن سلسلة التنسيق أو تضيفها في مجموعة المصنف. كائنات `TXLSXRange` مملوكة لورقة العمل ويتم تحريرها عند تدمير ورقة العمل؛ لا يقوم المستخدمون بتحريرها.
  • تمت إضافة `TXLSXCell.NumberFormat: WideString` وهي طريقة ملائمة تعمل مع `NumberFormatIndex` الموجودة. عند القراءة، يتم إرجاع سلسلة التنسيق من مجموعة المصنف؛ عند الكتابة، يتم البحث عن السلسلة أو إضافتها وتحديث `NumberFormatIndex` بشكل شفاف. يتطلب ذلك أن تكون الخلية مرتبطة بمصنف (التدفق القياسي عبر `TXLSXWorkbook.Sheets.Add(...).Cells[r, c]`).
  • تمت إضافة مراجع للخلف من الخلية إلى الورقة إلى المصنف بحيث يمكن لكل `TXLSXCell` تحديد المصنف الذي يملكه دون الحاجة إلى سجلات خارجية. اكتسبت `TXLSXSheets` و `TXLSXWorksheet` و `TXLSXCells` مراجع داخلية للمالك تم ربطها من خلال منشئيها؛ تعرض `TXLSXCell` خاصية `Workbook` للقراءة فقط و `SetWorkbook` داخلي تستخدمه `TXLSXCells.GetItem` عند إنشاء خلية تلقائيًا عند الوصول إليها.

الإصدار 2.17.42

  • تم إصلاح مشكلة فقدان الخلايا عند إعادة فتح ملفات XLSX. كانت الخلايا التي تم كتابتها بواسطة SaveAs تُحذف عند الفتح، حيث كانت الدالة HasCell(row, col) تُرجع قيمة False، وفُقدت جميع معلومات حالة الخلية (القيمة، الصيغة، فهرس الخط، فهرس التعبئة، فهرس الحدود، فهرس تنسيق الرقم). كان السبب هو استدعاء غير ضروري لـ MoveToAttribute('r') في محلل ورقة العمل، مما أدى إلى تغيير نوع العقدة للقارئ إلى سمة، مما جعل الفحص اللاحق لـ IsEmptyElement يُرجع قيمة True، وبالتالي إيقاف تحليل الخلايا لكل عنصر <c> يحتوي على سمة r="" (أي كل خلية). يمنع إزالة حركة المؤشر غير الضرورية فقدان الخلايا النصية والرقمية والصيغ وتواريخ الخلايا.
  • تم إصلاح مشكلة استعادة فهرس النمط عند إعادة فتح ملفات XLSX. كانت الفهارس المخصصة للخطوط والتعبئة والحدود وتنسيق الأرقام في الخلايا تُقرأ كقيمة صفرية حتى بعد أن تمت معالجة المجموعات المطابقة (Workbook.Fonts/Fills/Borders/NumberFormats) بنجاح. كان محلل cellXf يتتبع موقعه باستخدام عداد يتقدم فقط عند علامة النهاية </xf>، ولكن برنامج Excel غالبًا ما يُصدر إدخالات ذاتية الإغلاق <xf .../> (بدون علامة <alignment> داخلية)، لذلك لم يتحرك العداد أبدًا عن القيمة صفر، مما أدى إلى استبدال كل تعيين cellXf للتسلسل السابق. الآن، يتقدم المحلل العداد أيضًا عند علامة الإغلاق الذاتية <xf/>، مما يضمن استعادة فهرس الخط/التعبئة/الحدود/تنسيق الرقم لكل خلية.
  • تم إصلاح مشكلة معالجة خلايا التاريخ في ملفات XLSX. كانت كتابة قيمة TDateTime إلى TXLSXCell.Value في السابق يتم توجيهها إلى مجموعة النصوص المشتركة باستخدام t="s" لأن الدالة VarIsNumeric() في Delphi تُرجع قيمة False لقيمة varDate. الآن، تقوم SaveAs بكتابة رقم التسلسل الخاص بالتاريخ مباشرةً في <v> وتطبق cellXf الخاص بالتاريخ، بحيث تفتح خلايا التاريخ كـ varDate بدلاً من سلسلة مُحلَّلة يمكن للمتصل عدم تحويلها مرة أخرى إلى TDateTime.

الإصدار 2.17.41

  • تم إصلاح خطأ "zlib stream does not support seeking" الذي يحدث عند إعادة فتح ملفات .xlsx تحتوي على صور مضمنة أو مشروع VBA (.xlsm). كانت مسارات إعادة تحميل الصور ومسارات إعادة تحميل حمولة VBA توجّهان الدفق المضغوط عبر TMemoryStream.CopyFrom(Source, 0)، والذي يقوم داخليًا بإرجاع Source للحصول على عدد البايتات؛ هذا الإرجاع ليس قانونيًا على دفق Deflate أحادي الاتجاه. تستخدم الآن كلا المواقع دالة مساعدة لقراءة البيانات على دفعات حتى نهاية الملف، مما يضمن أن ملفات .xlsx التي تحتوي على صور أو وحدات ماكرو يمكن معالجتها بنجاح من خلال SaveAs/Open دون ظهور أخطاء.

الإصدار 2.17.40

  • تمت إضافة دعم لأوراق الرسم البياني الكاملة (ورقة عمل الرسم البياني) إلى محرك XLSX. تعرض TXLSXWorksheet علامة جديدة باسم IsChartSheet بالإضافة إلى وظيفة مساعدة على مستوى المصنف باسم Workbook.AddChartSheet(Name, ChartType, Title) تقوم بإنشاء الورقة، وتعيين العلامة، وتعبئة Charts[0] بقيمة افتراضية مناسبة. تقوم SaveAs بحفظ أوراق IsChartSheet في xl/chartsheets/sheetN.xml مع ملف rels مخصص يشير إلى جزء الرسم المشترك، وتسجلها كأنواع محتوى لورقة الرسم البياني، وتصدر علاقة ورقة الرسم البياني في xl/_rels/workbook.xml.rels. تحتفظ أوراق العمل العادية بمسارها الحالي في xl/worksheets/sheetN.xml. يتعرف Open على أوراق الرسم البياني من خلال نوع العلاقة ولكنه يقوم حاليًا بتحميلها كأوراق عمل عادية (لا تزال بيانات الرسم الخاصة بها تصل من خلال أجزاء الرسم المشتركة).

الإصدار 2.17.39

  • تمت إضافة دعم للصفوف/الأعمدة المطوية للـ round-trip لمجموعات التخطيط في محرك XLSX. تعرض TXLSXWorksheet خصائص منطقية باسم RowCollapsed[Row] و ColCollapsed[Col] بالإضافة إلى وظائف مساعدة باسم SetRowCollapsed / SetColCollapsed / ClearRowCollapsed / ClearColCollapsed. تقوم SaveAs بإخراج السمة collapsed="1" في إدخالات <row> و <col> المطابقة؛ يقوم Open بتحليل هذه السمة مرة أخرى. بالإضافة إلى السمات الموجودة outlineLevel و hidden، يتيح ذلك لمحرك XLSX إجراء round-trip لهيكل مجموعة مطوية بالكامل.

الإصدار 2.17.38

  • تمت إضافة دعم للصفوف/الأعمدة المخفية للـ round-trip إلى محرك XLSX. تعرض TXLSXWorksheet خصائص منطقية باسم RowHidden[Row] و ColHidden[Col] بالإضافة إلى وظائف مساعدة باسم SetRowHidden / SetColHidden / ClearRowHidden / ClearColHidden. تقوم SaveAs بإخراج السمة hidden="1" في إدخالات <row> و <col> المطابقة؛ يقوم Open بتحليل هذه السمة مرة أخرى في ورقة العمل بحيث تبقى الصفوف/الأعمدة المخفية سليمة خلال عملية round-trip دون الحاجة إلى تعيين عرض مخصص أو مستوى تخطيط.

الإصدار 2.17.37

  • تمت إضافة دعم لـ round-trip لألوان علامات ورقة العمل إلى محرك XLSX. تعرض TXLSXWorksheet خصائص باسم TabColor (ARGB) و TabColorIsAuto. تقوم SaveAs بإخراج كتلة <sheetPr><tabColor rgb="..."/></sheetPr> كأول عنصر فرعي لـ <worksheet> عندما يتم تعيين لون علامة التبويب؛ يقوم Open بتحليل <tabColor> مرة أخرى في ورقة العمل بحيث تبقى علامات التبويب الملونة سليمة خلال عملية round-trip. تظل المصنفات الافتراضية خالية من الكتلة الإضافية (TabColorIsAuto = True).

الإصدار 2.17.36

  • تمت إضافة دعم لعملية حفظ واستعادة محاذاة الخلايا إلى محرك XLSX. تم إضافة تعدادات جديدة باسم TXLSXHorizontalAlignment و TXLSXVerticalAlignment، بالإضافة إلى الفئة TXLSXAlignment (Horizontal، Vertical، WrapText، ShrinkToFit، Indent، TextRotation)، ومجموعة TXLSXAlignments على مستوى المصنف (Workbook.Alignments). الآن، تحمل TXLSXCell فهرس محاذاة (AlignmentIndex) (يبدأ من 1) يشير إلى إدخال في Workbook.Alignments. عند الحفظ، تتم إضافة عنصر cellXf واحد مع عنصر فرعي مضمن <alignment/> لكل إدخال محاذاة في المصنف؛ عند الفتح، تتم قراءة سمات <alignment> مرة أخرى إلى Workbook.Alignments ويتم ربط cellXf بالفهرس TXLSXCell.Alignment. وظيفتي ParseWorksheetXml و ParseStylesXml أضافتا معلمة CellXfAlignMap لنقل التعيين بين المرحلتين.

الإصدار 2.17.35

  • تمت إضافة واجهة برمجة تطبيقات (API) لتشفير AES (وفقًا لمعيار ECMA-376) إلى محرك XLSX. تعرض TXLSXWorkbook وظائف SaveAsEncrypted(FileName, Password) / OpenEncrypted(FileName, Password) / CanReadEncrypted(FileName)، بالإضافة إلى استثناء TXLSxEncryptionNotImplemented. يمكن لـ CanReadEncrypted التعرف على بايتات السحر الخاصة بملفات Microsoft Compound File Binary ($D0 $CF $11 $E0 $A1 $B1 $1A $E1) حتى يتمكن المستخدمون من اكتشاف الأرشيفات المشفرة قبل تحديد كيفية فتحها؛ تقوم OpenEncrypted تلقائيًا بالرجوع إلى Open العادي لملفات .xlsx غير المشفرة. لا تزال خطوة AES-128/256 + SHA + OLE Compound File غير متصلة - كل من الكتابة والقراءة للأرشيفات المشفرة بالفعل تثير الاستثناء المحدد حتى يتم تنفيذ الخوارزمية في الإصدار التالي. تم تصميم نوع الاستثناء ليكون متميزًا حتى تتمكن التطبيقات الحالية من التقاطه والرجوع إلى Worksheet.Protect / Workbook.ProtectWorkbook للحماية المرئية.

الإصدار 2.17.34

  • الأداء: تم استبدال عملية دمج السلاسل النصية WideString ذات التعقيد O(N^2) المستخدمة لبناء صفوف الخلايا في ورقة العمل بمحرك TXLSWideStringBuilder. أصبحت الصفائح الكبيرة (10000 خلية أو أكثر) الآن ذات ذاكرة ووحدة معالجة مركزية خطية أثناء الحفظ. تمت إضافة وظيفة مساعدة جديدة WriteWorksheetXmlStreaming وخيار TXLSXWorkbook.StreamingWrite - عند التمكين، لا يحتفظ SaveAs بجميع ملفات XML الخاصة بكل ورقة عمل في ذاكرة تخزين مؤقت باسم sheetXmls في نفس الوقت؛ يتم بناء كل ورقة عمل وكتابتها ثم حذفها قبل الانتقال إلى الورقة التالية. يتم إصدار ملف sharedStrings.xml في النهاية، لذلك لا تزال المسار التدريجي ينتج SST مكتملة. السلوك الافتراضي لم يتغير.

الإصدار 2.17.33

  • تمت إضافة عمليات نطاقات الخلايا إلى محرك XLSX. تعرض TXLSXWorksheet وظائف ClearRange(R1, C1, R2, C2)، وCopyRange(SrcR1, SrcC1, SrcR2, SrcC2, DstR, DstC) للنسخ داخل ورقة العمل، وCopyRangeTo(... TargetSheet, DstR, DstC) للنسخ بين أوراق العمل، وMoveRange(SrcR1, SrcC1, SrcR2, SrcC2, DstR, DstC) للقص واللصق. تقوم كل عملية بتكرار قيمة الخلية، والصيغة، وأربعة مؤشرات للنمط، وأي حمولة نصية غنية؛ تتجنب MoveRange التداخل مع الوجهة، بحيث لا يزال التداخل الجزئي يحافظ على القيم المنسوخة. تكتسب TXLSXCells أيضًا وظيفة مساعدة Remove(Row, Col).

الإصدار 2.17.32

  • تمت إضافة نقاط تثبيت الارتباط التشعبي الداخلية إلى محرك XLSX. الآن، يحمل TXLSXHyperlink خاصية Location (مثل "Sheet2!A1") ووظيفة مساعدة IsInternal؛ تعرض TXLSXHyperlinks وظائف AddInternal، وتضيف TXLSXWorksheet ثلاثة أحمال زائدة لـ AddHyperlinkToCell. عند الحفظ، يتم إصدار الارتباطات التشعبية الداخلية مع سمة inline location="" ويتم تخطي إدخال ورقة العمل rels؛ يتعرف Open على الارتباطات التشعبية location="" ويعيد توجيهها من خلال AddInternal. تستمر الارتباطات التشعبية لعنوان URL الخارجي في المرور عبر ملف rels دون تغيير.

الإصدار 2.17.31

  • تمت إضافة دعم النص الغني ثنائي الاتجاه إلى محرك XLSX. تم إضافة فئة TXLSXRichTextRun جديدة (لكل جزء: الاسم / الحجم / Bold / Italic / Strikethrough / Underline / اللون) و TXLSXRichText التي تعرض وظائف AddRun / AddRunText / Clear / PlainText. الآن، تحتوي TXLSXCell على خاصية RichText مملوكة؛ عند الحفظ، يتم كتابة الخلية كسلسلة مشتركة مع عدة عناصر <r>/<rPr>/<t>، ويعيد Open إنشاء TXLSXRichText من إدخال SST الذي تم تحليله، مع بقاء قيمة Variant للخلية تعرض النص العادي المدمج للمتصلين الذين يتجاهلون التنسيق.

الإصدار 2.17.30

  • تمت إضافة دعم الرسوم البيانية ثنائي الاتجاه إلى محرك XLSX. تم إضافة تعداد TXLSXChartType جديد (عمودي / شريطي / خطي / دائري)، و TXLSXChartSeries (الاسم، نطاق الفئات، نطاق القيم)، و TXLSXChart (نوع الرسم البياني، العنوان، عناوين المحاور، خلايا From/To، السلاسل) بالإضافة إلى مجموعة TXLSXCharts لكل ورقة عمل (Worksheet.Charts). تعرض TXLSXWorksheet وظيفة AddChart(Type, Title, FromRow, FromCol, ToRow, ToCol). عند الحفظ، يتم إصدار ملف xl/charts/chartN.xml (ترقيم عالمي على مستوى المصنف) وربطه بـ twoCellAnchor / graphicFrame داخل ملف xl/drawings/drawingN.xml المشترك؛ يقوم Open بتحليل كل من نقطة التثبيت وتعريف الرسم البياني مرة أخرى في المجموعة. يتم حفظ عناوين الرسوم البيانية، وعناوين المحاور، وأسماء السلاسل، ونطاقات المصادر.

الإصدار 2.17.29

  • تم إصلاح خطأ EListError "العملية غير مسموح بها في القائمة المرتبة" والذي كان يظهر بواسطة SetColWidth، SetRowHeight، SetRowOutlineLevel، و SetColOutlineLevel. تم إنشاء كل من هذه الحقول الأربعة من نوع TStringList مع Sorted=True ولكن تم الكتابة إليها من خلال المُعرّف Values[Name] := X، وهو ما ترفضه مكتبة RTL الخاصة بـ RAD Studio في القوائم المرتبة. الآن، يتم إنشاء القوائم بدون ترتيب؛ وتستمر عمليات البحث من خلال IndexOfName، وهو أمر مقبول في عدد الأعمدة/الصفوف النموذجي لكل ورقة.

الإصدار 2.17.28

  • تم إصلاح TZipArchive.Exists، والذي كان عبارة عن دالة وهمية كانت تعود دائمًا بقيمة خاطئة. يستخدم مسار XLSX Open دالة zip.Exists(...) للتحقق من كل جزء قبل القراءة، لذلك كانت كل عمليات القراءة السابقة (الخلايا، الأنماط، التعليقات، الرسومات، خصائص المستند، الأسماء المعرفة، الحماية، VBA، إلخ) تتجاهل محتوياتها. الآن، تقوم Exists بتفويض العملية إلى Fcd.Entries.Exists، مما يطابق نمط OpenFile / CreateFile.

الإصدار 2.17.27

  • تمت إضافة الحفاظ على مشاريع VBA إلى محرك XLSX. تعرض TXLSXWorkbook حمولة بايت لمشروع VbaProject بالإضافة إلى المساعدات LoadVbaProjectFromFile(FileName)، ClearVbaProject، و HasVbaProject. تقوم SaveAs بكتابة البايتات إلى xl/vbaProject.bin، وتسجل نوع المحتوى .bin، وتغير نوع محتوى المصنف إلى النوع المدعوم للمكرو، وتضيف علاقة vbaProject إلى ملف rels الخاص بالمصنف؛ تقوم Open بقراءة xl/vbaProject.bin مرة أخرى إلى الخاصية. لا يتم تحليل البايتات أو تعديلها، لذلك يتم الحفاظ على مشاريع .xlsm الحالية تمامًا. ملاحظة: يجب حفظ المصنفات التي تدعم الماكرو بامتداد .xlsm حتى يتمكن Excel من تمكين الماكرو.

الإصدار 2.17.26

  • تمت إضافة حماية المصنف والورقة إلى محرك XLSX. تعرض TXLSXWorksheet وظائف Protect / Protect(Password) / UnProtect بالإضافة إلى IsProtected و SheetProtectHash؛ تضيف TXLSXWorkbook وظائف ProtectWorkbook (مع خيارات password، LockStructure، LockWindows) و UnProtectWorkbook بالإضافة إلى IsWorkbookProtected / WorkbookProtectHash / LockStructure / LockWindows. تقوم SaveAs بإخراج <sheetProtection> لكل ورقة محمية و <workbookProtection> للمصنفات المحمية؛ تقوم Open بتحليل كلا الكتلتين مرة أخرى إلى واجهة برمجة التطبيقات. يتم تخزين كلمات المرور كـ "hash" سداسي عشري قياسي لضمان التوافق (لا يمكن استعادة النص الأصلي).

الإصدار 2.17.25

  • تمت إضافة الحفاظ على خصائص المستند إلى محرك XLSX. تعرض TXLSXWorkbook الآن خصائص Title، Author، Subject، Keywords، Description، Category، LastModifiedBy، Created، Modified، Company، Application، و AppVersion. تقوم SaveAs بإخراج docProps/core.xml و docProps/app.xml (وتسجيلهما في [Content_Types].xml + _rels/.rels) عندما يتم تعديل أي خاصية؛ تقوم Open بتحليل كلا الملفين مرة أخرى بحيث تظل أسماء المؤلفين وعلامات التعديل والبيانات الوصفية للتطبيق سليمة عند الحفظ وإعادة الفتح.

الإصدار 2.17.24

  • تمت إضافة دعم كامل لعمليات استيراد وتصدير الجداول بنمط Excel إلى محرك XLSX. تم إضافة الفئة الجديدة TXLSXTable (Id, Name, DisplayName, Range, Columns, StyleName, ShowFirstColumn / ShowLastColumn / ShowRowStripes / ShowColumnStripes) ومجموعة TXLSXTables لكل ورقة عمل. تعرض TXLSXWorksheet الجداول بالإضافة إلى AddTable(Name, Range, ColumnNames). عند الحفظ، يتم إنشاء ملف xl/tables/tableN.xml (ترقيم عالمي على مستوى المصنف)، وتحديث الروابط في ورقة العمل مع علاقات الجداول، وإضافة <tableParts> إلى ورقة العمل، وتسجيل نوع المحتوى للجداول. عند الفتح، يتم تحليل علاقات الجداول وملف tableN.xml مرة أخرى في ورقة العمل بحيث تظل الشرائط المنسقة للجداول سليمة عند الحفظ وإعادة الفتح.

الإصدار 2.17.23

  • تمت إضافة دعم كامل لعمليات استيراد وتصدير عوامل التصفية التلقائية إلى محرك XLSX. تعرض TXLSXWorksheet خاصية AutoFilterRange بالإضافة إلى دوال SetAutoFilter(Row1, Col1, Row2, Col2) / SetAutoFilter(Range) / ClearAutoFilter. عند الحفظ، يتم إنشاء عنصر <autoFilter ref="..."/> بعد كتلة دمج الخلايا عندما يكون النطاق غير فارغ؛ عند الفتح، يتم تحليل الخاصية "ref" مرة أخرى في الخاصية بحيث تظل شريط التصفية في ورقة العمل سليماً عند الحفظ وإعادة الفتح.

الإصدار 2.17.22

  • تمت إضافة دعم كامل لعمليات استيراد وتصدير إعدادات الصفحة إلى محرك XLSX. تعرض TXLSXWorksheet خصائص Margin{Left,Right,Top,Bottom,Header,Footer}, PageLandscape, PaperSize, PageScale, FitToWidth, FitToHeight, HeaderText، و FooterText بالإضافة إلى دوال SetPageMargins(L, R, T, B[, H, F]). عند الحفظ، يتم إنشاء الكتل المقابلة <pageMargins>، <pageSetup>، و <headerFooter> بين الروابط والرسومات؛ عند الفتح، يتم تحليلها مرة أخرى. تبقى أوراق العمل الافتراضية دون تغيير (تتحكم علامة PageSetupTouched في الإخراج).

الإصدار 2.17.21

  • تمت إضافة دعم كامل لعمليات استيراد وتصدير تجميد الألواح إلى محرك XLSX. تعرض TXLSXWorksheet الدالتين FreezePane(Col, Row) / UnfreezePane بالإضافة إلى الخصائص للقراءة فقط FreezeCol و FreezeRow. عند الحفظ، يتم كتابة كتلة <sheetViews>/<pane state="frozen"> قبل <sheetData> مع قيمة activePane و selection المطابقة؛ عند الفتح، يتم تحليل <pane state="frozen"> مرة أخرى في موضع التجميد بحيث تظل تخطيطات تجميد الجزء العلوي/الأيسر/الزاوية سليمة عند الحفظ وإعادة الفتح.

الإصدار 2.17.20

  • تمت إضافة مستويات التجميع للصفوف والأعمدة إلى محرك XLSX. تعرض TXLSXWorksheet الخصائص المفهرسة RowOutlineLevel[Row] و ColOutlineLevel[Col] بالإضافة إلى الدوال SetRowOutlineLevel / HasRowOutlineLevel / ClearRowOutlineLevels والدوال المقابلة للأعمدة. عند الحفظ، يتم إنشاء سمات outlineLevel على إدخالات <row> وإدخالات <col> المدمجة (بالتزامن مع العرض المخصص عند وجوده). عند الفتح، يتم تحليل كلا السمتين مرة أخرى في ورقة العمل بحيث تظل التسلسلات الهرمية المجمعة للصفوف والأعمدة سليمة خلال عملية الاستيراد والتصدير.

الإصدار 2.17.19

  • تمت إضافة التنسيق الشرطي والتحقق من صحة البيانات مع دعم حفظ التغييرات في محرك XLSX. تم إضافة TXLSXCfOperator و TXLSXConditionalFormat (Range, Op, Formula1, Formula2) بالإضافة إلى TXLSXConditionalFormats في كل ورقة عمل (Worksheet.ConditionalFormats). تم أيضًا إضافة TXLSXDataValidationType، TXLSXDvOperator، TXLSXDataValidation (Range, ValidationType, Op, Formula1, Formula2, AllowBlank, ShowInputMessage, ShowErrorMessage)، ومجموعة TXLSXDataValidations (Worksheet.DataValidations) مع اختصار AddList(Range, Items) للحالات الشائعة للقوائم المنسدلة. تعرض TXLSXWorksheet وظائف مساعدة مثل AddConditionalFormat و AddDataValidation / AddListValidation. عند الحفظ، يتم كتابة كتل <conditionalFormatting> (مع cfRule type="cellIs") وكتلة <dataValidations> بعد sheetData. عند الفتح، يتم تحليل كلا الكتلتين وإعادتهما إلى المجموعات.

الإصدار 2.17.18

  • تمت إضافة دعم حفظ التسميات المعرفة (defined names) في محرك XLSX. تم إضافة TXLSXDefinedName (Name, Formula, SheetIndex) ومجموعة TXLSXDefinedNames على مستوى المصنف (Workbook.DefinedNames) مع دوال Add(Name, Formula[, SheetIndex]) و IndexOfName للبحث. عند الحفظ، يتم إخراج كتلة <definedNames> في xl/workbook.xml؛ يتم تضمين سمة localSheetId (خاصة بالورقة) للإدخالات التي تحتوي على SheetIndex >= 0، والإدخالات التي تحتوي على SheetIndex = -1 تكون خاصة بالمصنف. عند الفتح، يتم تحليل عناصر <definedName> وإعادتها إلى المجموعة بحيث تحتفظ المصنفات المحفوظة والمُعادة فتحها بنطاقات التسمية الخاصة بها.

الإصدار 2.17.17

  • تمت إضافة دعم حفظ الصور في محرك XLSX. تم إضافة TXLSXImageFormat (png, jpeg, gif, bmp)، TXLSXImage (Row/Col anchor, WidthEMU/HeightEMU, Format, Data)، ومجموعة TXLSXImages لكل ورقة عمل. تعرض TXLSXWorksheet مجموعة الصور بالإضافة إلى وظائف مساعدة مثل AddImage(Row, Col, Data, Format) و AddImageFromFile(Row, Col, FileName). عند الحفظ، يتم كتابة بايتات الصورة في xl/media/imageN.<ext>، ويتم إنشاء xl/drawings/drawingN.xml مع نقطة تثبيت خلية واحدة لكل صورة (وملف _rels مطابق)، ويتم تسجيل أنواع المحتوى وعلاقات ورقة العمل/الرسم، ويتم إخراج مرجع <drawing r:id="..."/> داخل ورقة العمل. عند الفتح، يتم تحليل drawingN.xml + علاقات الرسم + الوسائط لإعادة الصور إلى Worksheet.Images.

الإصدار 2.17.16

  • تمت إضافة تنسيق رقم مخصص ثنائي الاتجاه لمحرك XLSX. تم إنشاء الفئة الجديدة TXLSXNumberFormat ومجموعة TXLSXNumberFormats على مستوى المصنف (Workbook.NumberFormats) لإزالة التكرار في رموز التنسيق باستخدام Add(FormatCode). تعرض TXLSXCell خاصية جديدة باسم NumberFormatIndex؛ تقوم SaveAs بإخراج كتلة <numFmts> في ملف xl/styles.xml (معرّفات مخصصة تبدأ من الأساس 164 المحجوز في OOXML) وتقوم بإقران كل تنسيق بـ cellXf مخصص، وتقوم Open بتحليل تنسيقات numFmts المخصصة مرة أخرى وتقوم بعكس الخريطة cellXf->numFmtId في NumberFormatIndex عند القراءة. الأولوية في حالة التعارض: FormatIndex > FontIndex > FillIndex > BorderIndex > NumberFormatIndex.

الإصدار 2.17.15

  • تمت إضافة تنسيق حدود الخلايا ثنائي الاتجاه لمحرك XLSX. تم إنشاء التعداد الجديد TXLSXBorderStyle، والفئة TXLSXBorderEdge (النمط واللون وما إذا كان اللون تلقائيًا لكل جانب)، والفئة TXLSXBorder مع الحواف اليسرى/اليمنى/العلوية/السفلية/القطرية بالإضافة إلى أدوات مساعدة SetAll(Style[, Color])، ومجموعة TXLSXBorders على مستوى المصنف (Workbook.Borders) مع اختصار Borders.AddBox(Style[, Color]). تعرض TXLSXCell خاصية جديدة باسم BorderIndex؛ تقوم SaveAs بإخراج كل حد في ملف xl/styles.xml وتقوم بإقرانه بـ cellXf مخصص، وتقوم Open بتحليل الحدود مرة أخرى وتقوم بتحويل الخريطة cellXf->borderId إلى BorderIndex عند القراءة. تظل الأولوية كما هي FormatIndex > FontIndex > FillIndex > BorderIndex عندما يتم تعيين عدة قيم على نفس الخلية.

الإصدار 2.17.14

  • تمت إضافة تنسيق تعبئة الخلايا ثنائي الاتجاه لمحرك XLSX. تم إنشاء التعداد الجديد TXLSXFillPattern والفئة TXLSXFill لوصف patternType وfgColor وbgColor؛ يمكن الوصول إلى المجموعة TXLSXFills على مستوى المصنف من خلال Workbook.Fills، مع أداة مساعدة Fills.AddSolid(color) للحالة الشائعة للون ثابت. تعرض TXLSXCell خاصية جديدة باسم FillIndex؛ تقوم SaveAs بإخراج كل تعبئة في ملف xl/styles.xml وتقوم بإقرانها بـ cellXf مخصص، وتقوم Open بتحليلها مرة أخرى وتقوم بعكس سمات الخلية في FillIndex عند القراءة. لا تزال FontIndex لها الأولوية عندما يتم تعيين كليهما.

الإصدار 2.17.13

  • تم الانتهاء من تنسيق الخط ثنائي الاتجاه لمحرك XLSX. تقوم Open الآن بتحليل ملف xl/styles.xml مرة أخرى في Workbook.Fonts وجدول cellXf->fontId؛ يتم تعيين سمة s الخاصة بكل خلية مرة أخرى في TXLSXCell.FontIndex بحيث تحتفظ المصنفات المحفوظة والمُعاد فتحها بالخطوط المخصصة (الاسم والحجم والخط العريض والمائل والتسطير والتحتية واللون).

الإصدار 2.17.12

  • تمت إضافة فئة TXLSXFont بالإضافة إلى مجموعة Workbook.Fonts بحيث يمكن للخلايا في XLSX اختيار خط مخصص. تحمل TXLSXCell خاصية جديدة باسم FontIndex؛ تقوم SaveAs بإخراج قائمة الخطوط في ملف xl/styles.xml و cellXf واحد لكل خط، ثم تقوم بالإشارة إلى cellXf المطابق من سمة s الخاصة بكل خلية. يتم التخطيط لعملية التنسيق ثنائي الاتجاه لـ FontIndex في الإصدار التالي.

الإصدار 2.17.11

  • تمت إضافة دعم كامل لارتفاع الصفوف في محرك XLSX. تعرض TXLSXWorksheet خاصية RowHeight[Row] بالإضافة إلى أدوات SetRowHeight و HasRowHeight و ClearRowHeights. تقوم SaveAs بكتابة سمات ht و customHeight="1" لكل عنصر <row> ب高さ مخصصة (بما في ذلك الصفوف التي تحتوي فقط على ارتفاع بدون بيانات خلايا)، وتقوم Open بقراءة سمة ht مرة أخرى إلى خريطة ارتفاع الصف.

الإصدار 2.17.10

  • تمت إضافة دعم كامل لعرض الأعمدة في محرك XLSX. تعرض TXLSXWorksheet خاصية ColWidth[Col] بالإضافة إلى أدوات SetColWidth و HasColWidth و ClearColWidths. تقوم SaveAs بإخراج كتلة <cols> تحتوي على إدخال <col> واحد لكل عمود مخصص؛ وتقوم Open بإعادة تفسير إدخالات <col min/max/width> مرة أخرى إلى ورقة العمل بحيث تعود العروض غير المعدلة إلى الإعدادات الافتراضية لـ Excel.

الإصدار 2.17.9

  • تمت إضافة دعم كامل للتعليقات في محرك XLSX. تعرض TXLSXWorksheet مجموعة Comments وأساليب AddComment(Row, Col, Text[, Author]). تقوم SaveAs بإخراج ملف xl/commentsN.xml (مع قائمة المؤلفين المكررة) وملف vmlDrawingN.vml المصاحب حتى يتمكن Excel من عرض فقاعات التعليقات؛ وتقوم Open بقراءة ملف commentsN.xml مرة أخرى إلى المجموعة. يتم التعامل مع علاقات ورقة العمل وأنواع المحتوى وتوصيلات <legacyDrawing> تلقائيًا.

الإصدار 2.17.8

  • تمت إضافة دعم كامل للروابط التشعبية في محرك XLSX. تعرض TXLSXWorksheet مجموعة Hyperlinks وأساليب AddHyperlink(Row, Col, Url[, Display[, Tooltip]]). تقوم SaveAs بكتابة كتلة <hyperlinks> في كل ورقة عمل وإخراج ملف مطابق xl/worksheets/_rels/sheetN.xml.rels مع أهداف URL الخارجية؛ وتقوم Open بقراءة علاقات ورقة العمل أولاً لحل إدخالات <hyperlink r:id="..."/> إلى عناوين URL في المجموعة.

الإصدار 2.17.7

  • تمت إضافة دعم كامل لدمج الخلايا في محرك XLSX. تعرض TXLSXWorksheet مجموعة MergedCells وطريقة MergeCells(R1, C1, R2, C2) التي تعكس نمط الواجهة الخلفية BIFF. تقوم SaveAs بإخراج كتلة <mergeCells> بعد sheetData، وتقوم Open بتحليل إدخالات <mergeCell ref="A1:B2"/> مرة أخرى إلى المجموعة.

الإصدار 2.17.6

  • محرك XLSX يقوم الآن بمعالجة قيم التاريخ والصيغ بشكل صحيح. يتم تسلسل قيم خلايا TDateTime كأرقام تسلسلية لـ Excel ويتم وضع علامة عليها باستخدام cellXf مدمج، بحيث يعرض Excel هذه القيم كتاريخ. عند الفتح، يتم فك ترميز الخلايا التي تشير إلى cellXf الخاص بالتاريخ مرة أخرى إلى متغيرات TDateTime. تعرض TXLSXCell خاصية Formula جديدة؛ تقوم SaveAs بكتابة الصيغة كعنصر فرعي <f> ويقوم Open بتحليل النص الموجود في <f> مرة أخرى إلى الخلية.

الإصدار 2.17.5

  • تمت إضافة هيكل styles.xml إلى محرك XLSX. تقوم SaveAs الآن بإخراج ملف xl/styles.xml صالح بحد أدنى، مع إدخالات الخطوط والملءات والحدود و cellStyleXfs و cellXfs الافتراضية، بالإضافة إلى تسجيلات نوع المحتوى والعلاقة الخاصة بكتاب العمل. تحمل الخلايا خاصية FormatIndex وتقوم بإخراج السمة "s="N"" عندما تكون غير صفرية، ويقوم Open بقراءة "s="N"" مرة أخرى إلى FormatIndex. سيتم إضافة أوصاف الأنماط الملموسة (الخطوط والملءات والحدود و cellXfs كمجموعات على مستوى كتاب العمل) في تحديثات لاحقة.

الإصدار 2.17.4

  • تمت إضافة دعم السلاسل المشتركة (SST) إلى محرك XLSX. تقوم SaveAs بإنشاء جدول سلاسل مكررة وتقوم بإخراج ملف xl/sharedStrings.xml، بدلاً من إخراج السلاسل المضمنة. يقوم Open بقراءة ملف xl/sharedStrings.xml أولاً ويقوم بحل مراجع "t="s"" من خلال SST. لا تزال خلايا السلاسل المضمنة من ملفات XLSX التابعة لجهات خارجية مقبولة عند الفتح.

الإصدار 2.17.3

  • تم استبدال مصفوفة سجلات الخلايا في TXLSXWorksheet بكائنات TXLSXCell ومجموعة TXLSXCells. الآن، موقع استدعاء الوصول إلى الخلية يقرأ Worksheet.Cells.Item[Row, Col].Value، مما يطابق شكل IXLSCells / IXLSRange في الواجهة الأمامية لـ BIFF. تتوفر أيضًا Worksheet.Cells.HasCell / Cells.Count / Cells.CellByIndex / Cells.Clear.

الإصدار 2.17.2

  • تم تقديم فئة المجموعة TXLSXSheets في TXLSXWorkbook، مما يعكس مجموعة IXLSWorkSheets في الواجهة الأمامية لـ BIFF. الآن، يقوم الكود بقراءة Workbook.Sheets.Add / Workbook.Sheets.Count / Workbook.Sheets[i] / Workbook.Sheets.IndexByName بدلاً من الطرق Workbook.AddSheet / Workbook.SheetCount / Workbook.Sheet[i] السابقة.

الإصدار 2.17.1

  • تمت إعادة تسمية TXLSXWorkbook.SaveToFile إلى SaveAs و TXLSXWorkbook.LoadFromFile إلى Open، وذلك ليتوافق مع نمط التسمية الحالي لـ IXLSWorkBook. تمت إضافة معاملات اختيارية لـ file-format و password بحيث تعمل واجهة XLSX بنفس طريقة واجهة BIFF. الآن، تقدم AddSheet معاملًا بدون وسائط يقوم بإنشاء اسم افتراضي للصفحة.

الإصدار 2.17.0

  • تقوم TXLSXWorkbook.SaveAs بإنشاء أرشيف .xlsx OOXML بسيط يحتوي على قيم الخلايا (أرقام، قيم منطقية، وسلاسل نصية مضمنة). يحتوي الأرشيف على أنواع المحتوى، والعلاقات الجذرية، وجدول العمل + العلاقات، وجدول بيانات لكل صفحة.
  • تقوم TXLSXWorkbook.Open بقراءة أرشيف .xlsx OOXML البسيط - أسماء الصفحات من xl/workbook.xml وقيم الخلايا من xl/worksheets/sheetN.xml. لا تزال السلاسل النصية المشتركة، والأنماط، والتواريخ، والصيغ غير مدعومة.
  • تمت إضافة مساحات أسماء OOXML، وأنواع المحتوى، والثوابت المتعلقة بالعلاقات، بالإضافة إلى أدوات مساعدة للإشارة / التحليل / الهروب (XlsxColumnLabel, XlsxCellRef, XlsxColumnIndex, XlsxParseCellRef, XlsxParseRangeRef, XlsxEscapeText, XlsxEscapeAttr) لاستخدامها في ميزات XLSX المستقبلية.

الإصدار 2.16.4

  • الآن، تحدد وحدة واجهة XLSX (lxHandleX) أنواعها الخاصة بجداول العمل وأوراق العمل (TXLSXWorkbook, TXLSXWorksheet)، بشكل مستقل عن واجهة BIFF. تم حجز نقاط الدخول للحفظ والتحميل؛ وسيتم ملء التوصيلات الخاصة بـ OOXML في إصدار لاحق.
  • تمت إضافة موضوع مرجعي للمطورين لواجهة XLSX الجديدة، يوضح كيفية وجود lxHandle و lxHandleX وكيف تتشارك وحدات المساعدة المشتركة.

الإصدار 2.16.3

  • تم تقديم lxHandleX، وهي وحدة واجهة XLSX مخصصة تعمل جنبًا إلى جنب مع واجهة BIFF الحالية lxHandle. تشترك الوحدتان في نفس البنية التحتية الأساسية (مجمعات الأنماط، وأدوات XML، وأرشيف ZIP)، لكنهما تعرضان تسلسلات هرمية مستقلة للفئات: تدير lxHandle الفئة TXLSWorkBook ومسارات XLS/HTML/RTF/CSV الكلاسيكية؛ وستدير lxHandleX الفئة TXLSXWorkbook وجميع واجهات برمجة التطبيقات الخاصة بـ XLSX. تمت إزالة ثلاثة أساليب وهمية أُضيفت عن طريق الخطأ إلى lxHandle (SetCodePage، وGetColumnXFIndex، وGetRowXFIndex) للحفاظ على واجهة برمجة التطبيقات العامة لواجهة BIFF مطابقة لما كانت عليه في الإصدار 2.15.0. لا يتطلب الكود الحالي الذي يستخدم lxHandle أي تغييرات.

الإصدار 2.16.2

  • تمت إضافة ثلاث وحدات داخلية لهياكل البيانات تُكمل أساس محرك XLSX: توفر lxAvlTree شجرة AVL بتعقيد O(log N) (TAVLTree/TAVLNode) للبحث المرتب؛ أما lxCols وlxRows فهما حاويتا معلومات الأعمدة والصفوف مع إزالة التكرار الدقيقة وإعادة كتابة الفهارس، وتُستخدمان في خرائط عرض الأعمدة وارتفاع الصفوف لكل ورقة في محرك XLSX. الوحدات الثلاث في وضع الخمول في هذا الإصدار وستُفعَّل في الإصدار 2.17.0 عند تمكين محرك القراءة/الكتابة XLSX لأول مرة.

الإصدار 2.16.1

  • تمت إضافة ست وحدات داخلية لأدوات XML وZIP تُكمل طبقة البنية التحتية لمحرك XLSX: lxWStream (تدفق ملفات بأحرف واسعة مع فحص وجود الملف ومساعد كتابة AnsiString)؛ lxCacheStream (غلاف تدفق ذو تخزين مؤقت يقلل استدعاءات الإدخال/الإخراج الأساسية)؛ lxZlibStream (تدفق ضغط/فك ضغط للأمام فقط، مستقل عن ارتباط تشفير BIFF الحالي loZliblxXmlReader (قارئ سحب بأسلوب SAX لتحليل XML بسرعة عالية)؛ lxXmlWriter (كاتب XML متدفق مع إعادة استخدام أسماء العناصر)؛ lxZipArchive (قارئ/كاتب ZIP ذو دليل مركزي مع تدفقات ضغط لكل مدخل). مع السبع وحدات من الإصدار 2.16.0، تُشكّل هذه الوحدات الأساس الداخلي الكامل لمحرك XLSX.

الإصدار 2.16.0

  • تمت إضافة سبع وحدات داخلية لبنية تحتية للأنماط تُشكّل الأساس لمحرك XLSX القادم: lxHashTable (جداول تجزئة عامة بأنواع مفاتيح صحيحة وWideString وكائن)؛ lxKeyList (قائمة بمفتاح كائن مع بحث سريع وإعادة كتابة الفهارس)؛ lxStyleColor (مدير ألوان سمات Office وفتحات لوحة الألوان)؛ lxStyleFont وlxStyleFill وlxStyleBorder (مجمعات مكررة لأنماط الخطوط والتعبئة والحدود تغطي جميع أنواع خطوط BIFF الـ 12 وتعيينات أنماط XLSX)؛ lxStyleXf (يجمع المجمعات الخمسة للأنماط مع قائمة تنسيقات الأرقام في سجل XF واحد). الوحدات السبع في وضع الخمول في هذا الإصدار ولا تؤثر على مسارات XLS الحالية.

الإصدار 2.15.1

  • تمت إضافة دوال مساعدة للألوان lxRgb: تقوم RGBtoHLS وHLStoRGB وRGBTint وGetRGBTint بالتحويل بين فضاءي الألوان RGB وHLS (نطاق HLS من 0–240). تُشكّل هذه الدوال الأساس لحسابات درجة اللون في سمات الألوان وتنسيق الشروط بمقياس الألوان والتحليل التدريجي للوحة الألوان في إخراج XLSX.
  • تمت إضافة منشئات السلاسل النصية عالية الأداء lxStrBuilder: تستخدم TXLSStringBuilder (AnsiChar) وTXLSWideStringBuilder (WideChar) مخازن مؤقتة مُخصصة مسبقًا ذات نمو مضاعف للقضاء على إعادة تخصيص الذاكرة عند تسلسل سلاسل Pascal القياسية. يُشغّل النوع AnsiChar مسار تسلسل XML لـ XLSX؛ بينما يتولى النوع WideChar تجميع السلاسل الواسعة في محلل XLSX.

الإصدار 2.15.0

  • تم إعادة تصميم مرجع HtmlHelp ليناسب الاستخدام عبر الويب، مع مجلدات مخصصة للمواضيع والأصول والبرامج النصية وأنماط المصدر.
  • تمت إضافة صفحة رئيسية للمساعدة سهلة الاستخدام عبر المتصفح وصفحة تنقل للمحتويات، مع رؤوس موحدة واختصارات للمواضيع وتذييلات.
العودة إلى الأعلى