ردیابی و ممیزی فرمول
نمای کلی
رفع خطای شبکههای فرمول در مدلهای بزرگ Delphi نیازمند ردیابی نحوه جریان مقادیر سلول از متغیرهای ورودی تا تجمیعهای خلاصه است؛ HotXLS APIهای ممیزی را برای ردیابی پیشنیازها و وابستگیهای فرمول گامبهگام فراهم میکند
API ردیابی فرمول
TXLSFormulaTracer یک فرمول را از درونیترین عباراتش کاهش میدهد و بازههای منبع، عبارات جایگزینشده، مقادیر میانی، نوع هر گام و وضعیت دقیق پشته عملوندها را قبل و بعد از هر گام ثبت میکند
TXLSFormulaStepKind = (stPush, stReduce, stFunction);
TXLSFormulaStep = record
Depth: Integer;
Source: WideString;
Expression: WideString;
Value: Variant;
StepKind: TXLSFormulaStepKind;
StackBefore: WideString;
StackAfter: WideString;
TokenStart: Integer;
TokenEnd: Integer;
end;
Source متن اصلی زیرعبارت است، Expression عملوندهای از قبل ارزیابیشده را با مقادیرشان جایگزین میکند و Value نتیجه گام است؛ StackBefore / StackAfter تصاویر جداشده با ویرگول از پشته عملوند هستند و TokenStart / TokenEnd گام را به یک بازه کاراکتری مبتنی بر 1 در فرمول منبع سنجاق میکنند
TraceReversed همان دادههای گام تغییرناپذیر را به ترتیب ارزیابی معکوس برای رابطهای گامبهعقب برمیگرداند
اشکالزادای تعاملی
TXLSFormulaDebugger یک مدل کامل از گرههای تجزیهشده میسازد و سپس اجرای واقعی را بدون ارزیابی شاخههای تنبلِ انتخابنشده ثبت میکند
TXLSFormulaDebugNodeKind = (fdnNumber, fdnString, fdnBoolean, fdnReference,
fdnRange, fdnParentheses, fdnUnary, fdnPercent, fdnBinary, fdnFunction);
TXLSFormulaDebugState = (fdsPending, fdsEvaluated, fdsSkipped, fdsError);
TXLSFormulaDebugBranch = (fdbNone, fdbIfTrue, fdbIfFalse, fdbIfErrorValue,
fdbIfErrorFallback, fdbChoose, fdbIfs, fdbSwitch);
TXLSFormulaDependencyKind = (fdkCell, fdkRange, fdkDefinedName);
نشست برگشتی عملوندها، مقادیر میانی، بازههای منبع، وابستگیهای ایستا، ترتیب ارزیابی، انتخابهای شاخه، گرههای ردشده، خطاهای استاندارد فرمول و خاستگاه خطاهای منتشرشده را در معرض میگذارد. هر TXLSFormulaDebugNode موقعیت درختی خود (NodeId، ParentNodeId، Depth)، Kind و State، بازه منبع، شناسه و مقدار گرههای عملوند، Branch انتخابشده و سهتایی خطای ثبتشده (ErrorCode، ErrorText، ErrorOriginNodeId) را گزارش میکند؛ هر TXLSFormulaDependency علاوه بر Kind، برگه حلشده، متن ارجاع، کرانها و وضعیت ارزیابی یک پیشنیاز را گزارش میکند
روشهای cursor به برنامه اجازه میدهند در نشست جلو یا عقب حرکت کند یا یک گره را بدون محاسبه مجدد فرمول پیدا کند
قابلیتهای ممیزی
رابطهای کلیدی ممیزی فرمول زیر را بررسی کنید
- ویژگی HasFormula — آشکارسازی اینکه آیا یک سلول حاوی فرمول است
- ویژگی Formula — خواندن یا تغییر توکنهای فرمول
- کلاس TXLSFormulaDebugger — تشخیص درختی و زمان اجرا
- نمای کلی موتور محاسبه — جزئیات محاسبه مجدد