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 | #DIV/0! 또는 #N/A와 같은 Excel 표시 텍스트 |
노드 진단
각 TXLSFormulaDebugNode는 상위, 깊이, 소스 범위, 노드 종류, 연산자 또는 함수 이름, 피연산자 노드 식별자, 피연산자 값, 결과 값, 평가 인덱스, 상태, 선택된 분기 및 오류 세부 정보를 보고합니다
노드 상태는 fdsPending, fdsEvaluated, fdsSkipped 또는 fdsError입니다
분기 진단은 true 및 false 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;