Τα φύλλα εργασίας Classic XLS και XLSX εκθέτουν το ίδιο API μόνο για ανάγνωση για την αξιολόγηση κειμένου τύπου σαν να είχε εισαχθεί σε μια επιλεγμένη σειρά και στήλη με αρίθμηση από τη μονάδα
Εφάπαξ αξιολόγηση
function EvaluateFormulaAt(Row, Col: Integer;
const Formula: WideString): TXLSFormulaEvaluationResult; overload;
function EvaluateFormulaAt(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle;
const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
Το φύλλο εργασίας παρέχει το πλαίσιο τοπικών ονομάτων, μη προσδιορισμένων αναφορών, πίνακα και εξωτερικών συνδέσμων, χωρίς να αλλάζει το ενεργό φύλλο, την επιλογή, το μοντέλο κελιών, την cache τύπων, την κατάσταση dirty ή το γράφημα εξαρτήσεων
Το xlfrsA1 διατηρεί τις απόλυτες και μικτές αναφορές ενώ επιλύει τις σχετικές αναφορές από το κελί-στόχο· το xlfrsR1C1 επιλύει τις σχετικές μετατοπίσεις απευθείας από αυτόν τον στόχο
Τυποποιημένα αποτελέσματα
Το TXLSFormulaEvaluationResult επιστρέφει το Status, την αρχική τυποποιημένη Value, το IsVolatile και μια σταθερή εγγραφή Issue που περιέχει κατάσταση, εγγενή κωδικό και μήνυμα
Τιμές τύπων όπως #DIV/0!, #REF!, κενές συμβολοσειρές, πίνακες, Boolean τιμές και ημερομηνίες παραμένουν διακριτές τιμές· οι αποτυχίες ανάλυσης, οι μη υποστηριζόμενες συναρτήσεις, οι κυκλικές αναφορές, οι απορριφθείσες εξωτερικές αναφορές, οι απορριφθείσες επισφαλείς επανακλήσεις, η ακύρωση, τα άκυρα ορίσματα, τα μη διαθέσιμα φύλλα εργασίας και η εξάντληση πόρων αναφέρονται με σαφείς καταστάσεις API
Επαναχρησιμοποιήσιμα αμετάβλητα πρότυπα
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Ένα πρότυπο μεταγλωττίζει τον τύπο μία φορά στην άγκυρά του και εκθέτει τα EvaluateAt και EvaluateAtWithOptions για επαναλαμβανόμενη αξιολόγηση σε διαφορετικά κελιά-στόχους
Οι συνηθισμένοι τύποι A1 και R1C1 επαναχρησιμοποιούν απευθείας το μεταγλωττισμένο δέντρο· οι δομημένες αναφορές A1 των οποίων το νόημα εξαρτάται από τη σειρά του πίνακα-στόχου επιλύονται και μεταγλωττίζονται για το συγκεκριμένο πλαίσιο στόχου
Τα πρότυπα δεν διατηρούν εγγράψιμη κατάσταση φύλλου εργασίας, αναφέρουν με ασφάλεια xlfeWorksheetUnavailable μετά την καταστροφή του βιβλίου εργασίας και επιστρέφουν σε επαναμεταγλώττιση με επίγνωση πλαισίου όταν οι αλλαγές του βιβλίου εργασίας καθιστούν το αρχικό μεταγλωττισμένο πλαίσιο παρωχημένο
Επιλογές πόρων, εξωτερικών αναφορών και επανακλήσεων
| AllowExternalReferences | Από προεπιλογή είναι true αλλά επιτρέπει μόνο ρητά καταχωρισμένους στόχους του workspace ή τοπικές στην cache του αρχείου πηγές και δεν εκτελεί ποτέ σιωπηρή πρόσβαση σε αρχείο ή δίκτυο |
| AllowUnsafeFormulaCallbacks | Από προεπιλογή είναι false και μπλοκάρει επικίνδυνα ονόματα συναρτήσεων πριν φτάσουν σε μητρώο συναρτήσεων χρήστη ή σε επανάκληση, πριν αξιολογηθεί οποιοδήποτε όρισμα· η άρνηση επιστρέφει xlfeUnsafeFunctionDenied |
| CancelFlag | Προαιρετικός Boolean δείκτης που ελέγχεται πριν και μετά την αξιολόγηση |
| MaxFormulaLength | Από προεπιλογή 8192 μονάδες κώδικα UTF-16 |
| MaxEvaluationSteps | Από προεπιλογή 1,000,000 αξιολογήσεις στοιχείων σύνταξης |
| MaxRecursionDepth | Από προεπιλογή 256 εμφωλευμένες αξιολογήσεις τύπων |
| MaxArrayBytes | Από προεπιλογή 64 MiB για τα παραγόμενα φορτία πινάκων |
Ένα μέγιστο μηδέν ή αρνητικό απενεργοποιεί το αντίστοιχο όριο ανά κλήση· η πολιτική μνήμης πινάκων σε επίπεδο βιβλίου εργασίας εξακολουθεί να ισχύει και η επίτευξη ενεργοποιημένου ορίου επιστρέφει xlfeResourceLimit μετά την απελευθέρωση της προσωρινής κατάστασης αξιολόγησης
Η υπερφόρτωση που δέχεται ρητές επιλογές θεωρεί το AllowUnsafeFormulaCallbacks αυθεντικό για αυτή την κλήση· η προεπιλεγμένη εφάπαξ αξιολόγηση και η αξιολόγηση προτύπου κληρονομούν την ομώνυμη ιδιότητα του βιβλίου εργασίας
Παράδειγμα Delphi
Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
'=R[-1]C[-1]+1', xlfrsR1C1);
Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
UseValue(Result.Value);
Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);
Παράδειγμα C++Builder
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);
Δείτε επίσης