صيغ XLSB وكائنات ورقة العمل
تقرأ واجهة مصنفات XLSX مجموعة XLSB فرعية متحققًا منها بقيم محددة النوع وصيغ عادية مخزنة وأسماء وأنماط شائعة وكائنات ورقة عمل ممثلة؛ وتُرفض الحالة غير الممثلة قبل إخراج الوجهة
الفتح والحفظ
if Workbook.Open('values.xlsb') <> 1 then
raise Exception.Create('XLSB input is unsupported or invalid');
if Workbook.SaveAsChecked('values-copy.xlsb', xlsxExcelBinaryWorkbook) <> 1 then
raise Exception.Create('XLSB output is unsupported or failed');
يكشف Open محتوى جزء المصنف ونوعه المسجل؛ ويضبط الإدخال الثنائي الناجح SourceFormat=xlsxExcelBinaryWorkbook بينما تبقى الأعداد الترتيبية الأصلية الأربعة لـ TXLSXFileFormat دون تغيير وللعضو الجديد العدد الترتيبي 4
تقبل حمولات SaveAs وSaveAsChecked للملف والتيار التنسيقَ الثنائي صراحةً؛ ويختار الحفظ الافتراضي ما زال تنسيق مصنف Open XML العادي بصرف النظر عن امتداد اسم الملف
يفحص GetConversionReport(xlsConversionExcelBinaryWorkbook) الحالة الحالية دون توسيع تخزين الخلايا المحزومة؛ وتبقى المدخلات غير المدعومة إخفاقات إلزامية حتى للحفظ غير المتحقق منه أو AllowLossy=True
الحالة المدعومة
- أوراق العمل العادية والأسماء والسلاسل Unicode والأعداد والقيم المنطقية والخلايا الفارغة والفارغة المنسقة وقيم الأخطاء العادية القابلة للتمثيل
- مدخلات السلاسل المشتركة والمضمّنة وسجلات الأعداد الأصلية المضغوطة والخلايا القصيرة ورؤية أوراق العمل وعلم نظام التاريخ وعروض واختيارات المصنف وورقة العمل العادية
- الخطوط الشائعة وتعبئات الأنماط وحدود الأطراف وتنسيقات الأعداد ومراجع تنسيق الخلايا وأعلام المحاذاة والحماية والألوان RGB والنسقية والمفهرسة الممثلة
- ارتفاعات الصفوف وعروض الأعمدة وأعلام الأبعاد المدعومة وهوامش الصفحات
- صيغ الخلايا العادية بالرموز الدوال القديمة المدعومة والمعاملات العددية ومراجع A1 ومراجع أوراق مفردة بنفس المصنف وأسماء المصنفات أو أوراق العمل، بذواكر عددية ونصية ومنطقية وأخطاء عادية
- الأسماء المعرَّفة العامة وبنطاق ورقة العمل وأعلام الأسماء المخفية والتعليقات والخلايا المدمجة والروابط التشعبية الخارجية والداخلية العادية والألواح المنفصلة أو المجمَّدة واختيارات الألواح
- نطاقات AutoFilter ومقارنات مخصصة عددية بمعيار AND/OR واحد أو اثنين وقوائم قيم مختارة عشوائية مع اختيار فارغ اختياري
- جداول أوراق العمل العادية بهوية ومدى ورؤية رأس وصف الإجماليات وهوية أعمدة وتسمياتها وتسميات صف الإجماليات الحرفية ومعايير AutoFilter الممثلة وأعلام نمط الجدول المدمج
- ضغط ZIP المهيأ وطوابع ZIP الحتمية عبر خيارات المصنف القائمة
يغطي تقرير التحويل ميزات النموذج الحي، ويبقى التحقق الكامل من الحزمة البوابةَ النهائية للمراجع غير الصالحة والسجلات المشوهة والسمات غير المألوفة والمحتوى المحفوظ غير المدعوم
يحتفظ الاستيراد الثنائي بالخط الافتراضي الصريح للملف وتنسيقات الأعداد المدمجة المدعومة، بما يشمل الخلايا الفارغة المنسقة؛ وتتطلب تنسيقات الأعداد المعتمدة على الإعدادات المحلية كود تنسيق صريحًا كي لا يخمّن القارئ التنسيق الإقليمي
الحدود الصريحة
سجلات الصيغ المشتركة وملكية المصفوفات والمصفوفات الديناميكية وثوابت المصفوفات والدوال معيدة المصفوفات ودوال المستقبل ودوال المستخدم ومراجع المصنفات الخارجية ومتعددة الأوراق وVBA واتصالات البيانات الخارجية وPivotTables وSlicers والمخططات والرسومات والتعليقات والنص الغني والتحقق والتنسيق الشرطي وبيانات الصفحة أو الامتدادات الوصفية المتقدمة تبقى خارج هذا الـ backend
الأعمدة المحسوبة للجداول وصيغ تجميع الإجماليات وحالة الفرز والتنسيق الجدولي التفاضلي أو المخصص والجداول المرتبطة باستعلام وخرائط XML تُرفض؛ وتُرفض كذلك فلاتر الألوان والأيقونات والديناميكية ومجموعات التواريخ والمعايير المخصصة المنطقية الأصلية محددة النوع والمعايير النصية الأصلية الشبيهة بالأعداد وتجاوزات رؤية زر الفلتر
تحتفظ معايير فلتر ورقة العمل المستوردة غير المخصصة بـ RawXml؛ وتمتلئ المقارنات المخصصة خصائص المعايير محددة النوع القائمة، بينما تبقى القيم المختارة والاختيار الفارغ معيارًا مدعومًا بـ XML لا API قائمة قيم محددة النوع جديدًا
يحفظ تحويل رموز الصيغ الدلالاتَ وأعلام المراجع؛ ويستطيع تطبيع نص الصيغة بالأقواس وأسماء الأوراق المقتبسة فلا يُوعد بهوية النص بايتًا مقابل بايت
يتطلب إخراج الصيغ ذاكرة عددية أو نصية أو منطقية أو خطأ عاديًا صريحة؛ وغياب الذاكرة يُرفض عندما لا تعيد سياسة الحفظ الحساب، بما يشمل xrmManual ورسم التبعيات النظيف مع xrmIfDirty؛ ويستطيع التطبيقات استدعاء Recalculate أو اختيار xrmAlways قبل الحفظ، والسلسلة الفارغة وFalse والصفر العددي ذواكر صالحة
يجب أن تستخدم خصائص الحساب الافتراضات المدعومة؛ وتُرفض الحساب اليدوي والتكرار والدقة المخفَّضة ووضع المرجع البديل والحساب القسري أو الناقص وتهيئة الخيوط الصريحة والإعدادات غير الافتراضية ذات المعنى الأخرى
سلاسل الحساب وفهارس الخلايا الثنائية بيانات وصفية مولَّدة ولا تُنسخ عبر جسر الحزمة؛ وتبقى سجلات الميزات غير المألوفة أو العلاقات إخفاقات بدلًا من صيرورتها أجزاء Open XML مصنوعة
يتطلب الإدخال الثنائي تحميلًا متلهفًا كامل الأوراق؛ وتُرفض قيمة MetadataOnly وقائمة SelectedSheets غير الفارغة قبل استبدال النموذج القائم لأن التحميل الكسول يتطلب أرشيفًا محولًا محفوظًا
ضمانات الفشل والملكية
تُتحقق الحزم الثنائية وتحوَّل قبل أن يصفّر محلل XML العادي المصنف؛ ويحفظ الإدخال غير المدعوم أو المحتوى الثنائي المشوه أو أوضاع القراءة المرفوضة أو إلغاء التحويل كائناتِ ورقة العمل القائمة واسم الملف وتنسيق المصدر وارتباط أرشيف المصدر
بعد دخول التحويل الثنائي المتحقق منه محللَ XML القائم، تتبع إخفاقات تحليل XML المتأخرة أو نداءات التطبيق دورة حياة فتح XML العادية؛ ولا يَعُد ضمان الفحص المسبق بالتراجع عن كتابات نداءات عشوائية
يجِّئ الحفظ الحزمة الثنائية كاملةً؛ ويستخدم إخراج الملفات ملفًا مؤقتًا شقيقًا واستبدالًا نهائيًا واحدًا، ويحتفظ إخراج التيار المقروء القابل للبحث بلقطة بايتات وحجم وموضع للتراجع بعد فشل الالتزام
تعكس قيمة LastSaveUsedStreaming=False تجهيزًا ثنائيًا كاملًا حتى عندما يبثّ كاتب XML الوسيط؛ وتشمل الذاكرة الأجزاء المحولة والحزمة كاملة فهذا الـ backend ليس كاتب بث محدود الذاكرة
يحتفظ تقرير التحويل والفحص المسبق بتخزين الخلايا المحزوم بما يشمل خليط قيم محزومة وصيغ مجسَّدة؛ ويستطيع الحفظ الناجح توسيع القيم المحزومة عبر تجهيز الأنماط القائم وكاتب ورقة العمل فلا تنطوي نقاء التقارير على عملية حفظ غير قابلة للتغيير أو غير مجسِّدة
يمسح حفظ الملف الثنائي الناجح ارتباطات مصدر XML الخام السابقة؛ ويحتفظ حفظ التيار بسلوك اسم الملف، ويُفحص الإلغاء قبل التزام الوجهة
واجهات تحويل الحزم
procedure XlsbToOpenXml(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); procedure OpenXmlToXlsb(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); function XlsbStylesToXml(const Data: AnsiString): AnsiString; function XlsbStylesFromXml(const Data: AnsiString): AnsiString; function XlsbStringsToXml(const Data: AnsiString): AnsiString; function XlsbStringsFromXml(const Data: AnsiString): AnsiString;
يتحقق TXlsbFormulaValidator.Create(WorkbookXml) من سياق أسماء المصنف ويتحقق Validate(FormulaText, SheetIndex) من صيغة دون وصول إلى خلايا ورقة العمل؛ وقيمة SheetIndex مبنية على الصفر ويمتلك المستدعي المدقق
يتحقق XlsbValidateTableXml(Data) وXlsbValidateAutoFilterXml(Data) من XML الكائنات UTF-8 مقابل عقود المُشفِّر نفسها التي يستخدمها إخراج الحزمة؛ وتثير الإخفاقات استثناءات التنسيق أو الميزة غير المدعومة القائمة
تحتفظ واجهات lxXlsb هذه بملكية المستدعي؛ ويتحقق تحويل الحزمة ويجهز كل الأجزاء قبل استبدال Destination من الإزاحة صفر، وتستخدم جسور الأجزاء الأساسية XML بترميز UTF-8 وبايتات ثنائية خام
يشتق EXlsbUnsupported من EXlsbFormatError ويميز رفض المجموعة الفرعية المتوقع عن البيانات المشوهة؛ ويثير الإلغاء استثناء إلغاء التيار المستقر قبل الالتزام
يقبل الضغط قيمًا من -1 إلى 9، ويقبل التاريخ الثابت صفرًا أو تاريخ DOS منتهيًا قابلاً للتمثيل من 1980 إلى 2107؛ وتُرفض الخيارات غير الصالحة قبل تغيّر الوجهة