HotXLS 문서

수식 추적 및 감사

개요

대형 Delphi 모델에서 수식 네트워크를 디버깅하려면 셀 값이 입력 변수에서 요약 집계로 어떻게 흐르는지 추적해야 합니다. HotXLS는 수식의 참조 셀과 종속 셀을 단계별로 추적하는 감사 API를 제공합니다

수식 추적 API

TXLSFormulaTracer는 수식을 가장 안쪽 식부터 축소하면서 각 단계의 소스 범위, 치환된 식, 중간 값, 단계 종류, 그리고 단계 전후의 정확한 operand 스택 상태를 기록합니다

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은 이미 평가된 operand를 그 값으로 치환한 식이며, Value는 해당 단계의 결과입니다. StackBefore / StackAfter는 쉼표로 구분된 operand 스택 스냅샷이고 TokenStart / TokenEnd는 해당 단계를 원본 수식 안의 1 기반 문자 범위로 고정합니다

TraceReversed는 되돌리기(step-back) 인터페이스를 위해 동일한 불변 단계 데이터를 역평가 순서로 반환합니다

대화형 디버거

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);
        

반환되는 세션은 operand, 중간 값, 소스 범위, 정적 의존성, 평가 순서, 분기 선택, 건너뛴 노드, 표준 수식 오류, 전파된 오류의 발생 지점을 노출합니다. 각 TXLSFormulaDebugNode는 트리상 위치(NodeId, ParentNodeId, Depth), Kind와 State, 소스 범위, operand 노드 id와 값, 선택된 Branch, 기록된 오류 트리플렛(ErrorCode, ErrorText, ErrorOriginNodeId)을 보고하고, 각 TXLSFormulaDependency는 Kind와 함께 선행 항목 하나의 해석된 시트, 참조 텍스트, 경계, 평가 상태를 보고합니다

커서 메서드를 사용하면 수식을 다시 계산하지 않고도 세션을 앞뒤로 이동하거나 특정 노드로 이동할 수 있습니다

감사 기능

아래의 수식 감사용 주요 인터페이스를 확인하십시오