Τα Classic XLS και XLSX εκθέτουν το ίδιο συμβόλαιο χωρίς παρενέργειες για την ταξινόμηση της εισόδου τύπων πριν ένας καλώντας αλλάξει ένα κελί
Κοινή πολιτική
TXLSFormulaEmptyStringMode =
(xlfesmClearCell, xlfesmPreserveString);
TXLSFormulaUnknownSymbolMode =
(xlfusmReject, xlfusmPreserve);
TXLSFormulaEntryPolicy = record
EmptyStringMode: TXLSFormulaEmptyStringMode;
UnknownFunctionMode: TXLSFormulaUnknownSymbolMode;
UnknownNameMode: TXLSFormulaUnknownSymbolMode;
end;
property FormulaEntryPolicy: TXLSFormulaEntryPolicy;
Τα Classic IXLSWorkbook και TXLSWorkbook εκθέτουν την ιδιότητα μαζί με το TXLSXWorkbook· το XLSDefaultFormulaEntryPolicy μηδενίζει την κενή είσοδο και απορρίπτει άγνωστες συναρτήσεις και άγνωστα ονοματισμένα ονόματα
Η ιδιότητα του βιβλίου εργασίας αντιγράφεται κατά τιμή και επικυρώνεται ατομικά κατά την ανάθεση, ώστε οι μη υποστηριζόμενες τιμές απαρίθμησης να προκαλούν EArgumentOutOfRangeException χωρίς να αλλάζει η προηγούμενη πολιτική
Αποτέλεσμα επικύρωσης
function ValidateFormulaEntry(Row, Col: Integer;
const Formula: WideString): TXLSFormulaEntryValidationResult;
TXLSFormulaEntryValidationResult = record
Issue: TXLSFormulaEntryIssue;
Action: TXLSFormulaEntryAction;
Symbol: WideString;
end;
Το Issue διακρίνει την απουσία σφάλματος, την άγνωστη συνάρτηση, το άγνωστο όνομα, το σφάλμα σύνταξης, τον περιορισμό της μορφής-στόχου και τις άκυρες συντεταγμένες στόχου
Το Action επιλέγει μηδενισμό κελιού, αποθήκευση συμβολοσειράς, αποθήκευση τύπου ή απόρριψη, ενώ το Symbol ταυτοποιεί άγνωστη συνάρτηση ή όνομα όταν κάποιο έχει αναγνωριστεί
Κενό κείμενο και τύποι
Η είσοδος που είναι ακριβώς κενή επιστρέφει xlfeaClearCell ή xlfeaStoreString ανάλογα με το EmptyStringMode
Ένας τύπος που επιστρέφει κενή συμβολοσειρά, όπως ="", παραμένει τύπος και επιστρέφει xlfeaStoreFormula όταν η μορφή-στόχος μπορεί να τον αναπαραστήσει
Το κείμενο του τύπου μπορεί να περιλαμβάνει ή να παραλείπει ένα αρχικό σύμβολο ισότητας
Η ανάθεση ακριβώς κενής συμβολοσειράς μέσω της κανονικής ιδιότητας Value του κελιού σε Classic XLS ή XLSX εφαρμόζει πλέον απευθείας αυτή τη λειτουργία: η προεπιλογή αφαιρεί κάθε υπάρχουσα τιμή ή τύπο, ενώ το xlfesmPreserveString αντικαθιστά το περιεχόμενο του κελιού με σταθερή συμβολοσειρά μήκους μηδέν
Τα Null και Unassigned μηδενίζουν πάντα το κελί και στις δύο λειτουργίες, ενώ ένας πραγματικός τύπος όπως ="" παραμένει τύπος με αποτέλεσμα κενής συμβολοσειράς που αποθηκεύεται ή υπολογίζεται ανεξάρτητα
Οι εγγραφείς γραμμών ή στηλών XLSX για string και Variant εφαρμόζουν τον ίδιο κανόνα χωρίς να υλοποιούν τις μηδενισμένες κενές θέσεις και διατηρούν τη συσκευασμένη μορφή αποθήκευσης όσο οι εναπομένουσες τιμές μπορούν να αναπαρασταθούν εκεί
Οι εγγενείς αναγνώστες XLS, XLSX και ODS καθώς και οι μετατροπείς XLS-to-XLSX ή XLSX-to-XLS θεωρούν τις αποθηκευμένες τιμές αξιόπιστη είσοδο, ώστε μια σταθερά κενής συμβολοσειράς σε επίπεδο αρχείου επιβιώνει ακόμη και όταν το βιβλίο εργασίας προορισμού διατηρεί την προεπιλεγμένη πολιτική εισόδου χρήστη
Άγνωστα σύμβολα και μορφές-στόχοι
Οι καταχωρισμένες συναρτήσεις χρήστη σε επίπεδο βιβλίου εργασίας ή διεργασίας και οι ανατεθειμένες επανακλήσεις OnUserFunction ή OnUserFunctionEx θεωρούνται γνωστές κατά την επικύρωση χωρίς να κληθεί κάποιος χειριστής, ενώ οι μη καταχωρισμένες κλήσεις διατηρούν το όνομα της συνάρτησής τους στο Symbol
Η αυστηρή λειτουργία επιστρέφει xlfeaReject για άγνωστες συναρτήσεις ή ονόματα· η ανάθεση μέσω της κανονικής ιδιότητας Formula του κελιού απορρίπτει πριν αλλάξουν η τιμή, η cache τύπων ή οι εξαρτήσεις
Η λειτουργία διατήρησης κρατά τη διαγνωστική πληροφορία και αποθηκεύει τον τύπο μέσω του κανονικού API κελιού· το Classic XLS σειριοποιεί μια άγνωστη κλήση μέσω tokens χρηστικών συναρτήσεων προσθέτων BIFF και διατηρεί το κείμενο άγνωστου ονόματος σε αποθήκευση, επανάνοιγμα και μετατροπή XLS/XLSX
Το Classic XLS επιπλέον μεταγλωττίζει τους γνωστούς τύπους μέσω του BIFF writer και επιστρέφει xlfeiTargetFormatUnsupported όταν η έκφραση δεν μπορεί να αναπαρασταθεί, ενώ το XLSX δέχεται τις γνωστές σύγχρονες συναρτήσεις τύπων που υποστηρίζει το μοντέλο τύπων του
Η επικύρωση XLSX αναγνωρίζει το LAMBDA, τις λεκτικές κλήσιμες μορφές LET, ονοματισμένα ονόματα που παραπέμπουν σε lambdas, placeholders αναφορών, καταχωρισμένους εξωτερικούς συνδέσμους βιβλίων εργασίας και έγκυρες προσδιορισμένες ή μη προσδιορισμένες δομημένες αναφορές, συμπεριλαμβανομένων εμφωλευμένων μορφών και μορφών τρέχουσας σειράς
Η λειτουργία συμβατότητας μπορεί επίσης να διατηρήσει ανεπίλυτες εξωτερικές δομημένες αναφορές για μεταγενέστερη επεξεργασία, ενώ η αυστηρή λειτουργία εξακολουθεί να απορρίπτει ανεπίλυτα ονόματα πινάκων
Υπολογισμός και μαζικός έλεγχος
Μια διατηρημένη άγνωστη συνάρτηση που παραμένει ανεπίλυτη μετά την ανακατανομή σε lambdas και συναρτήσεις χρήστη, ή ένα διατηρημένο άγνωστο όνομα, αξιολογείται ως σφάλμα Variant με κωδικό $1D, το σφάλμα #NAME? του Excel· η ίδια τυποποιημένη κατάσταση διαδίδεται στους εξαρτημένους τύπους και στην αξιολόγηση με βάση το πλαίσιο
Οι γνωστές ενσωματωμένες συναρτήσεις που δεν έχουν υλοποιηθεί παραμένουν διακριτές από μια άγνωστη κλήση, ενώ η καταχώριση, αντικατάσταση, αφαίρεση ή εκκαθάριση συνάρτησης χρήστη σε επίπεδο βιβλίου εργασίας ή διεργασίας και η αλλαγή τύπου ονοματισμένου ονόματος ακυρώνουν παρωχημένη κατάσταση εξαρτήσεων και υπολογισμού
function AuditFormulaSymbols: TXLSFormulaSymbolIssues; overload;
function AuditFormulaSymbols(
out AStats: TXLSFormulaSymbolAuditStats):
TXLSFormulaSymbolIssues; overload;
Τα TXLSWorkbook και TXLSXWorkbook παρέχουν τις ίδιες υπερφορτώσεις μαζικού ελέγχου· κάθε ζήτημα ταυτοποιεί άγνωστη συνάρτηση, άγνωστο όνομα ή σφάλμα σύνταξης μαζί με τοποθεσία κελιού φύλλου εργασίας ή τοποθεσία ονοματισμένου ονόματος, τον πηγαίο τύπο και το ανεπίλυτο σύμβολο
Ο έλεγχος διασχίζει μεταγλωττισμένα δέντρα τύπων ή αποθηκευμένα tokens BIFF αντί να σαρώνει κείμενο, ώστε κείμενο που μοιάζει με συνάρτηση μέσα σε συμβολοσειρά να μην αναφέρεται· η μεταγλώττιση XLSX χρησιμοποιεί cache τοπική στη λειτουργία με κλειδιά το επιλυμένο κείμενο τύπου, το φύλλο εργασίας, τις τοπικές ρυθμίσεις, τη γενιά ονοματισμένων ονομάτων, τις γενιές μητρώου συναρτήσεων χρήστη και τη διαθεσιμότητα επανακλήσεων
Το EntryCount αναφέρει τους ελεγμένους τύπους, το UniqueFormulaCount τους τύπους που μεταγλωττίστηκαν ή εξετάστηκαν ανεξάρτητα και το CacheHitCount τις επαναλαμβανόμενες καταχωρίσεις που εξυπηρετήθηκαν από τη cache της λειτουργίας
Καμία μεταβολή φύλλου εργασίας
Η επικύρωση δεν δημιουργεί ούτε επεξεργάζεται κελί, δεν αλλάζει τιμές cache, δεν ενημερώνει το γράφημα εξαρτήσεων, δεν επισημαίνει το βιβλίο εργασίας ως dirty ούτε καλεί καταχωρισμένο χειριστή συνάρτησης χρήστη
Η άμεση επικύρωση παραμένει απαλλαγμένη από μεταβολές· η κανονική ανάθεση τύπου εφαρμόζει εσωτερικά την ίδια απόφαση και ολοκληρώνεται μόνο όταν η επικύρωση και η προετοιμασία της μορφής-στόχου επιτύχουν
Παράδειγμα Delphi
Policy := Workbook.FormulaEntryPolicy;
Policy.UnknownFunctionMode := xlfusmReject;
Policy.UnknownNameMode := xlfusmReject;
Workbook.FormulaEntryPolicy := Policy;
Validation := Sheet.ValidateFormulaEntry(4, 2, FormulaText);
if Validation.Action = xlfeaStoreFormula then
Sheet.Cells[4, 2].Formula := FormulaText;
Issues := Workbook.AuditFormulaSymbols(Stats);
for I := 0 to High(Issues) do
if Issues[I].Kind = xlfsiUnknownFunction then
LogUnknownSymbol(Issues[I].Symbol);
Δείτε επίσης