Проследяване и одит на формули
Общ преглед
Отстраняването на грешки в мрежи от формули в големи модели на 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 изгражда пълен модел от разборени възли и после записва реалното изпълнение, без да изчислява неизбрани lazy клонове
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 — Диагностика чрез разборено дърво и по време на изпълнение
- Общ преглед на изчислителния механизъм — Детайли за преизчисляването