دقة الحساب والتحويل
تتراكب المصفوفات المحسوبة عبر دوال التحديد والفرز والبحث والمصفوفات وإعادة التشكيل، مع ملكية spill تلقائية في XLSX ووجهات CSE صريحة وموارد تقييم محدودة
المصفوفات الديناميكية ومصفوفات CSE الصريحة
أسند تعبيرًا منتجًا للمصفوفات إلى TXLSXCell.Formula واحدة واستدعِ TXLSXWorkbook.Recalculate؛ وبذلك تمتلك النتيجة spill مستطيلة ترتكز على تلك الخلية، بما يشمل صيغًا مثل SEQUENCE(3,2) وA1:A3*10 وثوابت المصفوفات ونتائج LET ذات قيم المصفوفات
Sheet.Cells.Item[1, 1].Formula := 'SEQUENCE(3,2)'; Sheet.Cells.Item[1, 4].Formula := 'SUM(A1#)'; Workbook.Recalculate;
يكبّر إعادة الحساب النتيجة أو يصغّرها، ويمسح التابعين المتقادمين المملوكين للمرساة فقط، ويعيد بناء التبعيات عند تغير المدى؛ ومراجع التابعين المستحدثين ومعامل spill A1# تستخدم المدى الحالي
القيم والصيغ والنص الغني والمصفوفات الأخرى والنطاقات المدمجة والجداول وحدود أوراق العمل القائمة تعترض spill وتنتج #SPILL!؛ وتظل الأنماط على الخلايا الفارغة غير ذلك قابلة للاستخدام، ومسح العائق يتيح لإعادة الحساب التالية إعادة محاولة المرساة
تحرير تابعٍ بقيمةٍ أو نصٍ غني يفصل تلك الخلية عن المرساة فتحافظ العملية الحسابية التالية على التحرير بوصفه عائقًا؛ وإزالة المرساة أو مسحها يحرر توابعها المملوكة، بينما يبقي ConvertFormulasToValues قيمها المحسوبة خلايا عادية
يسجّل حفظ XLSX مدى المصفوفة الحالي وبياناتها الوصفية، ويعيد التحميل ملكية التوابع المخزنة القائمة قبل إعادة الحساب؛ وصيغ المصفوفات المحتوية على أخطاء تحتفظ بمداها ما دامت الأخطاء تعود لعناصر مفردة
يبقى SetArrayFormula نقطة دخول CSE صريحة ذات مدى ثابت في محركي المصنفات؛ فالحساب الخام على النطاق يقيَّم عنصرًا بعنصر داخل ذلك النطاق، بينما تحتفظ الصيغ العددية العادية بالتقاطع الضمني
يعترض المعامل الأحادي @ مرجعًا بخلية الصيغة ويأخذ أول عنصر من مصفوفة محسوبة؛ وSINGLE وANCHORARRAY اسمان مستعاران للتخزين مقبولان للتقاطع الضمني ومراجع spill
يقبل MAP مصفوفات إدخال متعددة بقائمة معاملات LAMBDA مطابقة، وينشر أخطاء العناصر، ويرفض نتائج المصفوفات المتداخلة بـ #CALC!؛ ويقبل FILTER مصفوفات محسوبة وأقنعة صفوف أو أعمدة، بما يشمل نشر الأخطاء ونتيجة #CALC! فارغة عند غياب بديل
يجري تعديل spill الديناميكي تسلسليًا حتى مع تهيئة خيوط حساب متعددة؛ ويحصر استقرار المدى في 32 تمريرة، وتُرفض المصفوفات الديناميكية في الحسابات التكرارية الدائرية بدلًا من معاملتها كنتائج عددية
يقبل INDEX المراجع وثوابت المصفوفات والمصفوفات المحسوبة؛ وعندما يكون كلا المحددين عدديًا يعيد محدد الصف والعمود الموجبان قيمة واحدة، ويعيد المحدد الصفري الصف أو العمود المختار، ويعيد محددان صفريان المصفوفة الكاملة؛ ومصدر مرجعي بمحددين عدديين يحتفظ بسلوك المرجع للمستهلكين مثل ROW وISREF
يمكن لمحددات الصفوف والأعمدة أن تكون مصفوفات أيضًا، بما يشمل الثوابت والمتجهات المحسوبة وقيم النطاقات وارتباطات LET؛ واتجاه الصف والعمود المتعاكسان يُبثّان إلى ضرب ديكارتي مستطيل، بينما يختار الاتجاهان المتطابقان مواضع مقترنة؛ وتُبثّ الأبعاد المفردة، وتعيد المواضع الغائبة في أبعاد غير متساوية قيم #N/A مفردة
عندما يكون أحد المحددين مصفوفة يختار المحدد الصفري أو المحذوف أول عضو في ذلك المحور بدلًا من توسيع صف أو عمود كامل؛ وتقتطع المحددات الكسرية نحو الصفر، وتعيد المحددات السالبة قيم #VALUE! مفردة قبل الاقتطاع، وتعيد المحددات خارج حدود المصدر قيم #REF! مفردة؛ والسلاسل والقيم المنطقية والأخطاء محددة النوع المختارة تحتفظ بأنواعها
يقبل SORT وUNIQUE النطاقات والثوابت والمصفوفات المحسوبة، بما يشمل نتائج FILTER وSEQUENCE وLET المتداخلة؛ واتجاه الصفوف والأعمدة والفرز التصاعدي أو التنازلي وترتيب أول ظهور وإزالة التكرارات بحيث يبقى ظهور واحد بالضبط تتبع العقد نفسه لكل شكل مصدر
يمكن للأسماء المعرَّفة على مستوى المصنف أن تزود مراجع أو قيمًا عددية أو مصادر مصفوفات محسوبة؛ ويميز ISREF(INDEX(...)) نتيجة مرجعية فعلية عن قيمة محسوبة مسماة؛ وتقتطع محددات INDEX العددية وخيارات SORT الرقمية القيم الكسرية، وترفض الوسائط المنطقية الاختيارية النص غير TRUE أو FALSE
Sheet.Cells.Item[1, 6].Formula := 'SORT(UNIQUE(FILTER(A1:B5,A1:A5>1)),1,-1)'; Sheet.Cells.Item[1, 9].Formula := 'INDEX(SORT(UNIQUE(A1:B5)),0,2)'; Sheet.Cells.Item[1, 12].Formula := 'INDEX(SEQUENCE(2,3,10,2),2,3)'; Workbook.Recalculate;
Sheet.Cells.Item[1, 1].Formula := 'INDEX(SEQUENCE(3,3),{1;3},{1,3})';
Workbook.Recalculate;
يفرد مثال المحددات هذا {1,3;7,9} في نتيجة 2×2؛ أما INDEX(SEQUENCE(3,3),{1;3},{1;3}) فيعيد بدلًا من ذلك العمود المقرن {1;9}؛ وتنتج محددات المصفوفات قيمًا حتى عندما يكون المصدر مرجعًا، بينما تحافظ محددات المراجع العددية على هوية المرجع
يمكن لهذه التعبيرات أن تفرود وتغيّر حجمها في XLSX أو أن تُقيَّم داخل وجهة CSE صريحة؛ وتبقى أخطاء مصادر المصفوفات محددة النوع وتعيد النتيجة الفارغة خالية التكرار #CALC!؛ وتستهلك مخارج المحددات ميزانية خطوات التقييم، وتُفحص حمولات مصفوفات المصدر والمحدد والنتيجة مجتمعةً وفق ميزانية ذاكرة المصفوفات
يقبل INDEX وسيطًا رابعًا صريحًا area_num بقيمة 1 لمصدر محسوب، ويمكن لمحددات الصف والعمود والمساحة أن تُبثّ معًا عبر اتحاد مراجع بنفس الورقة مدعوم؛ وتحتفظ المراجع متعددة المساحات الفعلية بهويتها عبر الأسماء المعرَّفة المحلية وLET، بينما يحتفظ CHOOSE العددي بالمرجع المختار بما في ذلك الاختيار في ورقة أخرى؛ ونتائج محددات المصفوفات قيم لا مصفوفات مراجع متداخلة؛ راجع اختيار مساحة INDEX وهوية المرجع لقواعد الصفر والغياب والإكراه والأخطاء
للحساب المستقل، يقبل TXLSCalculator.OnGetSpillRange نداءً عكسيًا من نوع TXLSGetSpillRange يحل حدود المرساة الشاملة الحالية؛ ومقيّمات المصنفات تثبّت هذا النداء تلقائيًا
TXLSGetSpillRange = function(SheetIndex, AnchorRow, AnchorCol: Integer; var LastRow, LastCol: Integer): Integer of object;
يطبّع lxNormalizeStorageFormula بنية صيغة المؤلف لـ OOXML، وlxTryStorageFormulaOperators يترجم معاملات spill والتقاطع الضمني، وlxApplyXlfnPrefix يضيف بادئات دوال المستقبل المطلوبة؛ وتبقى النص المحميّ وفواصل صفوف المصفوفة سليمين، وإسناد الصيغة يحتفظ بنص المستدعي في الذاكرة
لا يغيّر الحفظ التعبير المكتوب في الذاكرة؛ وإعادة فتح صيغ XLSX المكتوبة حديثًا تعيد البنية التخزينية القيانية بوسائط مفصولة بفواصل وبدون = بادئة، بما يطابق استيراد Excel الأصلي؛ ويحتفظ XML الصيغ المستوردة غير المتغير بمسار حفظه القائم
تركيب البحث والمصفوفات وإعادة التشكيل
يقبل TRANSPOSE المراجع والثوابت والمصفوفات المحسوبة مع الحفاظ على النص والقيم المنطقية والأخطاء المفردة؛ وتصبح خلايا المصدر الفارغة صفرًا عدديًا
يقبل MMULT وMDETERM وMINVERSE مصفوفات محسوبة وتعبيرات متداخلة مثل MMULT(MUNIT(2),SEQUENCE(2,2))؛ ويجب أن تكون مدخلات المصفوفة عددية، مع رفض النص والقيم المنطقية والفارغ بدل إكراهها، وتبقى أخطاء المصدر برموز أخطائها
يقبل CHOOSECOLS وCHOOSEROWS متجهات محددة عددية أو أحادية البعد، ويسلسل المحددات بترتيب الوسائط، ويحفظ التكرارات، ويعد الفهارس السالبة من النهاية؛ وتقتطع المحددات الكسرية نحو الصفر، ويرفض المحدد الصفري وخارج المدى، أما مصفوفات المحددات ثنائية الأبعاد فغير مدعومة
يقبل XLOOKUP وXMATCH وMATCH متجهات بحث محسوبة وطلبات بحث ذات قيم مصفوفات؛ ويجب أن تشغل المفاتيح صفًا واحدًا أو عمودًا واحدًا، ويجب أن تتواءم مصفوفات إرجاع XLOOKUP مع محور البحث ذاك
يمكن لـ XLOOKUP العددي أن يعيد صفًا أو عمودًا مطابقًا كاملًا، بما يشمل الأخطاء محددة النوع؛ ويحتفظ طلب البحث ذو القيم المصفوفية بشكلِه الخاص ويأخذ أول مكون من كل شريحة مطابقة أو مصفوفة بديلة
تتخطى عمليات البحث التامة سجلاتَ المسح المدخلاتِ الخطأ في متجه المفاتيح؛ وتبقى المفاتيح المنطقية والعددية والنصية متمايزة، بينما تحتفظ مسارات المراجع العددية العادية بسلوك البث وذاكرة إعادة الحساب القائمين؛ وما زالت أوضاع البحث الثنائي تتطلب مفاتيح مرتبة ترتيبًا صحيحًا
يقبل VSTACK وHSTACK وTAKE وDROP وTOROW وTOCOL وWRAPROWS وWRAPCOLS وEXPAND مدخلات محسوبة وحشوًا محدد النوع؛ والنتيجة بلا صفوف أو أعمدة تعيد #CALC!، ويتطلب الالتفاف إدخالًا أحادي البعد
تستهلك أعمال المصفوفات ومسح البحث واجتياز المحددات والنسخ والحشو ميزانية خطوات التقييم؛ وتُفحص حمولات مصفوفات الإدخال والعمل والإخراج المحتفظ بها آنيًا وفق حد ذاكرة المصفوفات المهيأ قبل التخصيص
Sheet.Cells.Item[1, 1].Formula := 'XLOOKUP({1;3},SEQUENCE(3),SEQUENCE(3,2))';
Sheet.Cells.Item[1, 4].Formula := 'CHOOSECOLS(SEQUENCE(2,3),{-1;1})';
Sheet.Cells.Item[1, 7].Formula := 'TRANSPOSE(UNIQUE({"A";"B";"A"}))';
Workbook.Recalculate;
أخطاء الحساب الحديثة محددة النوع
يبقى #SPILL! و#CALC! أخطاء خلايا محددة النوع عبر الحساب والعرض وفحص الذاكرة المؤقتة وإعادة فتح XLSX؛ ويحمل إخراج XLSX بياناتها الوصفية ذات القيم الغنية مع الاحتفاظ بالبديل القياني لخطأ مخزن للقراء الذين لا يفهمون ذلك الامتداد
نتائج نصوص الصيغ، بما يشمل توابع CSE والمصفوفات الديناميكية، تستخدم ذواكر السلاسل الحرفية ليعرضها Excel قبل إعادة الحساب؛ وتواصل خلايا القيم العادية استخدام السلاسل المشتركة
يشمل إخراج الأخطاء الغنية الحديث إصدارَ المصنف وإعلانات ميزة حساب البيانات الغنية اللذين يتطلبهما Excel لتفسير تلك الذواكر قبل إعادة الحساب؛ وقيمة calcId الصادرة لا تقل عن 191029 مع الحفاظ على القيم الأعلى المطلوبة دون تغيير خاصية CalcId للمصنف في الذاكرة
تحتفظ بيانات الخلايا والقيم الوصفية المستوردة وهياكل القيم الغنية غير ذات الصلة والجرافات المعتمة بهويتها الأصلية عند إلحاق جرافات أخطاء جديدة؛ واستبدال خلية خطأ يمسح البيانات الوصفية للأخطاء محددة النوع المتقادمة عند الحفظ
TXLSXRichErrorCodes هو نوع مصفوفة الأعداد الصحيحة المستخدم لجرافات الأخطاء الغنية المفككة؛ ويقرأ كود التطبيق الأخطاء محددة النوع من قيمة Variant الخاصة بالخلية
لا يستطيع BIFF8 تمثيل هذه الأخطاء الحديثة أو معاملات spill بأمانة؛ ويرفض مُسلسِل Classic التمثيلات الحديثة غير المدعومة بدلًا من إسناد رمز خطأ قديم غير ذي صلة
الفحص المسبق للتحويل
يعيد TXLSXWorkbook.GetConversionReport TXLSConversionReport مملوكًا للمستدعي دون إعادة حساب أو تغيير المصنف؛ وتُعلن الأنواع في lxDiagnostics
Report := Workbook.GetConversionReport(xlsConversionOpenDocument);
try
for I := 0 to Report.Count - 1 do
InspectIssue(Report.Items[I]);
finally
Report.Free;
end;
| Target | xlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook, أو xlsConversionExcelBinaryWorkbook |
| Fidelity | TXLSConversionFidelity: xlsConversionPreserved أو xlsConversionDegraded أو xlsConversionDropped أو xlsConversionUnsupported |
| Issue | يعرض TXLSConversionIssue Feature وFidelity وSheetIndex وSheetName وLocation وMessage؛ ويشمل HasLoss مدخلات Degraded وDropped وUnsupported |
يجرد التقرير فقدانات التنسيقات المعروفة مثل VBA والحماية وعروض المصنف والاتصالات وجداول الاستعلام والتعليقات والروابط الخارجية وخرائط XML وبنية الجداول ومعايير الترشيح والرسومات وذواكر الأخطاء محددة النوع وصيغ التحقق أو بنية الصيغ غير المدعومة وملكية المصفوفات وأجزاء الامتدادات المعتمة؛ وهو يصف مسارات التحويل المنفذة ولا يمنح شهادة لكل ميزة في كل تطبيق خارجي
يحتفظ ODS بخلايا الجداول العادية ونتائج الصيغ المخزنة ونص التعليقات ومؤلفيها المدعومين وحماية أوراق العمل بلا كلمة مرور والمرشحات القابلة للتمثيل، بينما يفقد كائن جدول Excel وهندسة المخططات الأغنى أو دلالات القواعد غير المدعومة؛ وتُبلَّغ حمولة حفظ OOXML المعتمة بوصفها dropped عندما يعجز الهدف عن حملها
تُبلِّغ واجهة XLSX عن إخراج BIFF8 بوصفه unsupported؛ واستخدم API مصنف Classic لسير عمل BIFF المدعوم؛ ويضيف الإصدار 2.384.93 backend محدود لقيم وأنماط XLSB يرفض الصيغ وكائنات الميزات والبيانات الوصفية وإعدادات الحساب غير الممثلة في الحفظ المُتحقق منه وغير المتحقق منه معًا
الحفظ المُتحقق منه
Status := Workbook.SaveAsChecked(Stream, xlsxOpenDocumentSpreadsheet, False);
تجري حمولات الملف والتيار فحصَ الفقدانات المعروفة مسبقًا قبل الكتابة؛ ويرفض AllowLossy=False الميزات المتدهورة أو المفقودة بتشخيصات تحويل، بينما يقبل AllowLossy=True تلك الفقدانات صراحةً ويظل يرفض التحويلات غير المدعومة
يترك الفحص المسبق المرفوض بايتات الوجهة وموضع التيار دون تغيير؛ وتستخدم الطلبات الناجحة معاملة الحفظ القائمة وتعيد اصطلاحات حالة الحفظ نفسها كما في SaveAs
يبقى SaveAs العادي متاحًا بسلوكه القائم؛ والتطبيقات التي تتطلب قرار فقد صريحًا عليها فحص التقرير واستخدام الحفظ المُتحقق منه
تنسيقات القوالب
يختار xlsxOpenXMLTemplate قالب XLTX خاليًا من الماكروهات، بينما يختار xlsxOpenXMLMacroEnabledTemplate قالب XLTM ويحفظ مشروع VBA القائم؛ والتنسيق صريح ولا يُستنتج من امتداد الملف أو من قالب مستورد
يرفض XLTX الخالي من الماكروهات مصنفًا يحمل VBA حتى مع تفعيل الحفظ المُتحقق منه السماح بالفقد؛ ويمكن إصدار حزمة XLTM دون مشروع VBA، ولا ينشئ HotXLS كود VBA
صيغ التحقق في ODS
يستخدم التحقق المنطقي المخصص of:is-true-formula(...)؛ وتترجم الحدود العددية المدعومة ومصادر القوائم ومراجع A1 المؤهلة والسلاسل وفواصل الوسائط إلى OpenFormula ويُعاد تأسيسها على عنوان خلية أساس التحقق عند الاستيراد
تُحذف تعبيرات التحقق المهيكلة أو الخارجية أو ثلاثية الأبعاد غير المدعومة مع مراجع خلاياها تفاديًا لتعريفات تحقق معلقة؛ ويبلّغ الفحص المسبق للتحويل عن القواعد المحذوفة
تعليقات ODS وحمايته ومرشحاته
يُصدَّر تعليق الخلايا العادي بوصفه تعليق OpenDocument بنصه ومؤلفه، بما يشمل الملاحظات الفارغة وعلامات Tab والمسافات وفواصل الأسطر؛ وتستخدم الملاحظات على خلايا غائبة أصلًا وإحداثيات بعيدة نطاقاتِ صفوف وأعمدة متكررة متفرقة دون إنشاء خلايا ورقة عمل
يحتفظ التعليق على خلية مرساة نطاق مدمج بعنوانه؛ وتُبلَّغ الملاحظة على خلية مغطاة أو خارج شبكة ورقة العمل بوصفها dropped؛ ويسطَّح نص التعليق الغني إلى نصه المعروض، وتحدد تقارير التحويل فقد تنسيقات المقاطع والأبعاد المخصصة للصندوق والعرض الدائم الظهور
تحتفظ علامة الحماية في OpenDocument وأنماط الخلايا المقفلة أو غير المقفلة المدعومة؛ ومجموعة أوراق العمل الجزئية بلا فقد لا تستخدم كلمة مرور أو استثناءات نطاقات قابلة للتحرير وتسمح باختيار الخلايا المقفلة وغير المقفلة فقط
Sheet.Protect; Sheet.SheetProtectionOptions := [xlsxSpoSelectLockedCells, xlsxSpoSelectUnlockedCells]; Sheet.Range['B2:B100'].Locked := False;
تُبلَّغ تجزئات كلمات مرور Excel وإعدادات كلمات المرور الحديثة والنطاقات القابلة للتحرير وأذونات الإجراءات خارج تلك المجموعة بوصفها degraded مع بقاء علامة الحماية؛ ومجموعة أذونات Excel الافتراضية الواسعة تتطلب كذلك قرار فقد صريحًا
يحتفظ استيراد OpenDocument بعلامة الحماية وأنماط قفل الخلايا؛ ولا تتحول تجزئات كلمات المرور الأصلية إلى تجزئات Excel، وتبقى بيانات الأذونات الوصفية المستوردة غير الممثلة فقدًا مسمى في تقارير التحويل اللاحقة
يدعم تصدير AutoFilter ستة معاملات مقارنة عددية وشرطين عدديين كحد أقصى لكل عمود مربوطين بـ AND أو OR، وAND بين الأعمدة؛ وقوائم اختيار القيم العادية والفارغ المدعومة بلا حد للقيمتين وتبقى بيانات ترشيح أصلية
تستخدم المعايير العددية قيمًا ثابتة منتهية؛ وتحفظ اختيارات النص محارفها الحرفية بما يشمل محارف البدل داخل قوائم الاختيار، بينما لا يوجد تحويل مدعوم مكافئ لتعبيرات البدل في المرشحات المخصصة أو المعايير المنطقية الملتبسة أو مجموعات التواريخ أو التواريخ الديناميكية أو مرشحات الألوان والأيقونات
تُحذف تعبيرات الترشيح غير المدعومة تعبيرًا كاملًا بدلًا من إضعاف شروط مختارة؛ ويبقى مدى الترشيح، ويحدد تقرير التحويل المعايير المحذوفة
يجِّئ حفظ تدفق ODS الحزمةَ المكتملة في ملف مؤقت مسجل قبل الكتابة في الموضع الأصلي للوجهة؛ وتُحفظ بايتات البادئة القائمة وإزاحات ZIP المطلقة بما فيها المواضع بعد النهاية الأصلية؛ ويحفظ الإلغاء أو استثناء نداء التقدم قبل الالتزام بايتاتِ الوجهة وحجمها وموضعها ويحرر الملف المؤقت؛ وتبقى إشعارة الكتابة النهائية غير قابلة للإلغاء
يدعم استيراد OpenDocument الاقترانات العددية نفسها وفصل النصوص بنفس العمود أو مجموعات القيم؛ ويبقى OR عبر الأعمدة والتعبيرات النمطية والمقارنات الحساسة لحالة الأحرف ومعاملات الترشيح الأصلية غير المدعومة فقدًا مستوردًا صريحًا
تصف TXLSXOdsImportLoss وTXLSXOdsImportLosses فئات أصل ورقة العمل الخاصة؛ وتستخدم تقارير التحويل ImportedOdsProtectionPassword وImportedOdsProtectionOptions وImportedOdsFilterCriteria وImportedOdsCommentFormatting؛ وتبقى عبر نسخ أوراق العمل وتظهر لهدفَي التحويل OpenDocument وOpen XML معًا
يحفظ تحويل الترشيح البيانات الوصفية ورؤية الصفوف القائمة دون تطبيق مرشحات أو إعادة حساب خلايا؛ وتبقى التطبيقات الأصلية مسؤولة عن سلوك الترشيح والتحرير الخاص بها