Κλάση 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;