فئة TXLSFormulaDebugger
يحلل TXLSFormulaDebugger صيغة في سياق ورقة عمل XLSX واحدة ويعيد TXLSFormulaDebugSession مملوكًا
تجمع الجلسة شجرة التعبير المُحلَّلة بالكامل مع ترتيب التقييم الفعلي والقيم الوسيطة وإحداثيات التبعيات والفروع الكسولة المختارة والتعبيرات المُتخطاة ومصدر الخطأ الأول
يملك المتصل كل جلسة يعيدها Analyze ويجب أن يحرّرها
الإعلان
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
أعضاء الجلسة
| Formula | المصدر المُطبَّع بدون علامة التساوي الاختيارية البادئة |
| FinalValue | قيمة عددية محسوبة أو خطأ صيغة Variant قياسي |
| Nodes | العُقد المُحلَّلة بترتيب الأصل قبل الفرع |
| Dependencies | تبعيات الخلية أو النطاق أو الاسم المعرّف مع إحداثيات ورقة العمل المُحلَّلة عند توفرها |
| StepNodes | العُقد بترتيب التقييم الحتمي، بما في ذلك العُقد المُتخطاة |
| CurrentNode | العقدة المختارة بواسطة مؤشر التنقل التفاعلي |
| ErrorOriginNodeId | أعمق عقدة نشأ منها خطأ الصيغة النهائي، أو -1 عندما لا تكون النتيجة النهائية خطأ |
| ErrorCode | رمز خطأ Excel المحمول بواسطة قيمة الخطأ النهائية |
| ErrorText | نص عرض Excel مثل #DIV/0! أو #N/A |
تشخيصات العقدة
يُبلّغ كل TXLSFormulaDebugNode عن أصله وعمقه ومدى المصدر ونوع العقدة واسم العامل أو الدالة ومعرّفات عُقد المعاملات وقيم المعاملات وقيمة النتيجة وفهرس التقييم والحالة والفرع المختار وتفاصيل الخطأ
حالة العقدة هي fdsPending أو fdsEvaluated أو fdsSkipped أو fdsError
تميّز تشخيصات الفروع بين مساري IF الصحيح والخاطئ ومساري القيمة والاحتياطي IFERROR أو IFNA وفرع CHOOSE أو IFS أو SWITCH المختار
تظل الأخطاء الداخلية المستردة مرئية على عُقدها حتى عندما تكون نتيجة الصيغة النهائية صحيحة
التنقل
- يختار
MoveFirstخطوة التقييم الأولى - ينقل
MoveNextوMovePreviousالمؤشر الحالي دون إعادة حساب - يختار
SeekNodeعقدة واحدة بواسطة معرّفها الثابت المحلي للجلسة - يمسح
Resetالمؤشر مع الحفاظ على كل التشخيصات
مثال
Debugger := TXLSFormulaDebugger.Create(Sheet);
try
Session := Debugger.Analyze('=IF(A1=0,42,B1/C1)');
try
if Session.MoveFirst then
repeat
Writeln(Session.CurrentNode.Source);
until not Session.MoveNext;
finally
Session.Free;
end;
finally
Debugger.Free;
end;