محرك حسابات Excel
نظرة عامة
يتضمّن HotXLS محركًا مدمجًا لتحليل وحساب الصيغ؛ يُقيّم هذا المحرك صيغ الخلايا برمجيًا ضمن عمليتك، مما يُلغي الحاجة إلى استدعاء Excel أو وحدات تحكّم OLE خارجية لحل قيم المصنف المحسوبة
تنفيذ الحساب
قبل الحفظ أو التصدير، شغّل إعادة حساب كاملة للمصنف باستخدام واجهة المصنف الرئيسية
procedure Calculate;
يدعم المحرك عائلات الدوال الرياضية والتاريخية والمنطقية والنصية والإحصائية القياسية؛ ويحلّ تبعيات الخلايا بالتسلسل ويتتبّع سلاسل المراجع لمنع المراجع الدائرية
التقييم السياقي للصيغ
توفّر TXLSWorksheet وTXLSXWorksheet الأسلوب EvaluateFormulaAt لحساب نص الصيغة عند صف وعمود محددين بترقيم يبدأ من الواحد، دون كتابة خلية مؤقتة أو تغيير حالة حساب المصنف
أنماط المرجع A1 و R1C1، والأسماء المحلية، والمراجع المهيكلة، وتبعيات الصيغ، وجذور الصفائف، وقيم أخطاء Excel المكتوبة الأنواع، وحالة الدوال المتطايرة (volatile)، وتفويض المراجع الخارجية الصريح، والإلغاء، وفئات الفشل المستقرة — كلها تمرّ عبر مُقيّم المصنف العادي نفسه
يصرّف CreateFormulaEvaluationTemplate مرساة (anchor) غير قابلة للتغيير مرة واحدة ويعيد استخدامها عبر خلايا الهدف؛ وتُحلّ المراجع المهيكلة A1 الحساسة لصف الهدف لكل سياق هدف، بينما تقيّد حدود كل استدعاء طول الصيغة وخطوات عناصر البنية وعمق الاستدعاء الذاتي وبايتات الصفيف الناتج
راجع التقييم السياقي للصيغ لمعرفة أنواع النتائج والميزانيات الافتراضية وقواعد دورة الحياة وأمثلة Delphi و C++Builder
معاملات الصفائف
معاملات الحساب والمقارنة والدمج والنفي الأحادي والنسبة المئوية تقبل الصفائف المحسوبة إلى جانب القيم العددية
القيمة العددية تُبثّ (broadcast) إلى كل عنصر، والصفيف ذو الصف الواحد أو العمود الواحد يُبثّ على البعد المتوافق؛ والأشكال غير المتوافقة تعيد #VALUE!
تبقى الأخطاء محفوظة في خلايا النتائج الخاصة بها، فقسمة واحدة على صفر أو عنصر واحد غير صالح لا تُضيّع القيم المحسوبة لبقية الخلايا
تتشارك COMBINA وPERMUTATIONA دلالات القيمة العددية والصفيف المُبثّ مع وسائط صحيحة غير سالبة مقتطعة نحو الصفر وفحصٍ لتجاوز السعة، بينما تعيد MUNIT مصفوفة الوحدة ثنائية الأبعاد من نوع Double بصيغة مضغوطة
قيمة FormulaArrayMemoryLimit الافتراضية 64 MiB وهي تحدّ حجم حمولات المصفوفات الناتجة؛ كما يتحقق MUNIT من مساحة الـ spill المتبقية في ورقة العمل بدلاً من فرض سقف ثابت للأبعاد
فحص وجود الصيغة
يفحص ISFORMULA(reference) ملكية الصيغة دون حساب الخلية المُشار إليها، فتبقى الصيغة قابلة للكشف حتى لو كانت نتيجتها المخزّنة خطأً أو سلسلة فارغة
النطاق المستطيل يعيد صفيف Boolean بنفس الشكل؛ وخلايا الصيغ المشتركة وأعضاء صيغ الصفائف الكلاسيكية أو XLSX تعيد true، بينما لا تُعد خلية صيغة سوى مرساة الـ spill الديناميكي
القيم المباشرة والأسماء المعرّفة العددية تعيد #VALUE!، والمراجع غير الصالحة تحافظ على #REF!، بينما تقيّد FormulaArrayMemoryLimit صفائف Boolean الناتجة
يكتب XLSX الاسم _xlfn.ISFORMULA ويعيد الاسم المجرد عند الفتح، وتستخدم ODS الصيغة القياسية of:=ISFORMULA، بينما يرفض خرج XLS الكلاسيكي الدالة المستقبلية غير المدعومة قبل إثبات البيانات
دوال النص الحديثة
تقتطع UNICHAR المدخلات الرقمية نحو الصفر وتحوّل قيم Unicode العددية الصالحة إلى UTF-16، بما في ذلك إخراج أزواج الـ surrogate للمستويات التكميلية وجميع نطاقات الاستخدام الخاص
المدخلات الصفرية أو الخارجة عن النطاق تعيد #VALUE!، بينما تعيد نقاط الكود من نوع surrogate المعزولة وقيم Unicode noncharacters الخطأ #N/A؛ ومدخلات النطاقات والصفائف الناتجة تحافظ على هذه الأخطاء لكل عنصر
يحوّل BAHTTEXT الأعداد المنتهية إلى نص بالبات التايلندي والساتانج، ويقرّب القيم المتوسطة بعيداً عن الصفر عند منزلتين عشريتين، ويحافظ على الإشارة السالبة إذا أصبحت القيمة المقربة صفراً، ويوسّع الترميز العلمي دون تضييق عبر نوع صحيح
يحفظ XLSX الدالة UNICHAR كـ _xlfn.UNICHAR ويعيد الاسم المجرد عند إعادة الفتح؛ أما BAHTTEXT فتحتفظ بهويتها القياسية كدالة وتبقى بالاسم المجرد في صيغ XLS و XLSX
الانحدار والتنبؤ
تقبل LINEST وLOGEST عمود تنبؤ واحداً أو أكثر (أو صفاً واحداً أو أكثر) وتعيد المعاملات بترتيب Excel يليها الجزء الثابت الاختياري (intercept)
عندما تكون وسيطة الإحصائيات true، تعيد الدالتان النتيجة الكاملة المكوّنة من خمسة صفوف، وتضم أخطاء المعاملات وإحصاءات المطابقة وإحصائية F ودرجات الحر ومجموع مربعات الانحدار ومجموع مربعات البواقي
تستخدم TREND وGROWTH النموذج متعدد المتغيرات نفسه وتحافظ على شكل الصف أو العمود لقيم التنبؤ الجديدة الممرّرة
إعادة حساب التبعيات في XLS الكلاسيكي
يبني TXLSWorkbook.Recalculate رسماً بيانياً لتبعيات الصيغ عند أول استدعاء ويقيّم الصيغ بترتيب "السوابق أولاً" بدلاً من الترتيب الفيزيائي للخلايا
الاستدعاءات اللاحقة تعيد استخدام الرسم وتعيد حساب التابعين المتعديّن (transitive) للقيم المتغيرة فقط، إضافة إلى الصيغ المتطايرة؛ وتُبطل تعديلات الصيغ والأسماء وبنية ورقة العمل وإعادة كتابة المراجع هذا الرسم وتعيد بناءه بأمان
المراجع الدائرية تستخدم إعدادات المصنف الكلاسيكي EnableIteration وMaxIterations وMaxIterationChange، بينما يطبّق UseFullPrecision=False دقة الأعداد المعروضة على النتائج المخزنة وحساباتها اللاحقة
تبعيات الأسماء المعرّفة
يتبع الحساب التزايدي الأسماء ذات النطاق على مستوى المصنف وعلى مستوى ورقة العمل عبر الصيغ المتداخلة والمراجع متعددة المناطق
صيغ الأسماء غير الدائرية تسهم بتبعيات خلاياها الدقيقة، بينما تعود دورات الأسماء العودية بأمان إلى إعادة حساب شاملة كالدوال المتطايرة
جداول بيانات What-If
أوراق العمل في XLS الكلاسيكي و XLSX الحديث على حدّ سواء تستطيع إنشاء وحساب وقراءة وكتابة ونسخ وتعديل بنيوي لجداول بيانات What-If بمتغير واحد أو متغيرين
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
يحتوي نطاق النتيجة على خلايا المخرجات المحسوبة فقط، بينما تستخدم الصيغ والقيم التجريبية الخلايا المحيطة بالتخطيط نفسه المعتمد في Excel
- جدول بإدخال عمودي — اترك
ARowInputCellفارغاً، وضع صيغة المصدر فوق كل عمود نتيجة، وضع القيم التجريبية إلى يسار صفوف النتائج - جدول بإدخال صفّي — اترك
AColumnInputCellفارغاً، وضع صيغة المصدر إلى يسار كل صف نتيجة، وضع القيم التجريبية فوق أعمدة النتائج - جدول بمتغيرين — مرّر خليتَي الإدخال معاً، وضع صيغة المصدر فوق نطاق النتائج وإلى يساره، والقيم التجريبية لإدخال الصفوف فوق النتائج، والقيم التجريبية لإدخال الأعمدة إلى اليسار
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;
Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;
هذا المثال ذو الإدخال العمودي يحسب 3 و5 و7 في D2:D4؛ وتُطبَّق كل قيمة تجريبية عبر سياق حساب معزول، لذا تُعَاد صياغة الصيغ التي تصل إلى B1 بشكل غير مباشر عبر خلايا صيغ أخرى بشكل صحيح
تعيد AddDataTable القيمة nil عند نطاق غير صالح أو مرجع إدخال غير صالح أو عندما يكون كلا مرجعَي الإدخال فارغين؛ وتكشف مجموعة DataTables في ورقة العمل التعريف الناتج وأعلام الإدخال المحذوف الخاص به
حذف خلية إدخال مُشار إليها يحافظ على تعريف الجدول ويعيد #REF! لمخرجاته، بما يطابق دلالات المصنف المخزّن
الدوال المعرّفة من قبل المستخدم
وسّع محرك الصيغ بمنطق أعمال مخصص؛ سجّل دوالك الخاصة باستخدام الأحداث أدناه
تُرفض الأسماء الخارجية الخطرة وأسماء نمط الماكرو قبل تشغيل الوسائط أو الـ handlers، ما لم يُفعِّل المصنف أو التقييم السياقي المفرد خيار AllowUnsafeFormulaCallbacks صراحةً
- الحدث OnUserFunction — معالجة الدوال المعرّفة من قبل المستخدم الأساسية
- الحدث OnUserFunctionEx — حل الدوال المعقّدة ذات معاملات نطاقات الخلايا
- رد نداء دالة المستخدم — متطلبات التوقيع للمعالجات الخارجية