Τεκμηρίωση HotXLS

Αξιολόγηση τύπων με βάση το πλαίσιο

Τα φύλλα εργασίας 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);

Δείτε επίσης

Η μέθοδος TXLSWorksheet.Calculate
Η μέθοδος IXLSWorkbook.Calculate
Μηχανή υπολογισμού Excel