Μηχανή υπολογισμού Excel
Επισκόπηση
Το HotXLS περιλαμβάνει μια ενσωματωμένη μηχανή για την ανάλυση και τον υπολογισμό τύπων· αυτή η μηχανή αξιολογεί τύπους κελιών μέσω προγραμματισμού μέσα στη διεργασία σας, καταργώντας την ανάγκη κλήσης του Excel ή εξωτερικών ελεγκτών OLE για την επίλυση υπολογισμένων τιμών του βιβλίου εργασίας
Εκτέλεση υπολογισμού
Πριν από την αποθήκευση ή την εξαγωγή, ενεργοποιήστε έναν πλήρη επανυπολογισμό του βιβλίου εργασίας χρησιμοποιώντας την κύρια διεπαφή βιβλίου εργασίας
procedure Calculate;
Η μηχανή υποστηρίζει τις τυπικές μαθηματικές, ημερολογιακές, λογικές, συμβολοσειράς και στατιστικές οικογένειες συναρτήσεων· επιλύει διαδοχικά τις εξαρτήσεις κελιών και ακολουθεί τις αλυσίδες αναφορών για την αποφυγή κυκλικών αναφορών
Αξιολόγηση τύπων βάσει πλαισίου
Τα TXLSWorksheet και TXLSXWorksheet εκθέτουν την EvaluateFormulaAt για τον υπολογισμό κειμένου τύπου σε επιλεγμένη γραμμή και στήλη με αρίθμηση από το 1, χωρίς εγγραφή προσωρινού κελιού ή αλλαγή της κατάστασης υπολογισμού του βιβλίου εργασίας
Τα στυλ αναφοράς A1 και R1C1, τα τοπικά ονόματα, οι δομημένες αναφορές, οι εξαρτήσεις τύπων, οι ρίζες πινάκων, οι τυποποιημένες τιμές σφαλμάτων του Excel, η κατάσταση volatile, η ρητή εξουσιοδότηση εξωτερικών αναφορών, η ακύρωση και οι σταθερές κατηγορίες αποτυχίας μοιράζονται την κανονική μηχανή αξιολόγησης του βιβλίου εργασίας
Η CreateFormulaEvaluationTemplate μεταγλωττίζει ένα αμετάβλητο anchor μία φορά και το επαναχρησιμοποιεί σε όλα τα κελιά-στόχους· οι δομημένες αναφορές A1 που εξαρτώνται από τη γραμμή-στόχο επιλύονται για κάθε πλαίσιο-στόχο, και τα όρια ανά κλήση δεσμεύουν το μήκος του τύπου, τα βήματα των συντακτικών στοιχείων, το βάθος αναδρομής και τα παραγόμενα bytes των πινάκων
Δείτε την Αξιολόγηση τύπων βάσει πλαισίου για τους τύπους αποτελεσμάτων, τα προεπιλεγμένα όρια πόρων, τους κανόνες διάρκειας ζωής και παραδείγματα σε Delphi ή C++Builder
Τελεστές πινάκων
Οι τελεστές αριθμητικής, σύγκρισης, συνένωσης, μοναδιαίου μείον και ποσοστού δέχονται υπολογισμένους πίνακες εκτός από βαθμωτές τιμές
Μια βαθμωτή τιμή διαχέεται σε κάθε στοιχείο, και ένας πίνακας μίας γραμμής ή μίας στήλης διαχέεται στη συμβατή διάσταση· ασυμβάτιστα σχήματα επιστρέφουν #VALUE!
Τα σφάλματα διατηρούνται στα δικά τους κελιά αποτελέσματος, έτσι ώστε μία διαίρεση με το μηδέν ή ένα άκυρο στοιχείο να μην απορρίπτει τις τιμές που υπολογίστηκαν για τα υπόλοιπα κελιά
Οι COMBINA και PERMUTATIONA μοιράζονται τη βαθμωτή σημασιολογία και τη σημασιολογία διάχυσης σε πίνακα, με περικομμένα μη αρνητικά ακέραια ορίσματα και ελεγχόμενη υπερχείλιση, ενώ η MUNIT επιστρέφει έναν συμπαγή δισδιάστατο μοναδιαίο πίνακα Double
Η FormulaArrayMemoryLimit έχει προεπιλογή 64 MiB και οριοθετεί τα παραγόμενα payloads των μητρών· η MUNIT επιπλέον επικυρώνει την υπόλοιπη περιοχή spill του φύλλου εργασίας αντί να επιβάλει σταθερό ανώτατο όριο διαστάσεων
Έλεγχος παρουσίας τύπων
Η ISFORMULA(reference) ελέγχει την ιδιοκτησία τύπου χωρίς να υπολογίζει το κελί που αναφέρεται, ώστε ένας τύπος να παραμένει ανιχνεύσιμος όταν η αποθηκευμένη τιμή του είναι σφάλμα ή κενή συμβολοσειρά
Ένα ορθογώνιο εύρος επιστρέφει έναν πίνακα Boolean ίδιου σχήματος· τα μέλη κοινόχρηστων τύπων και κλασικών ή XLSX τύπων πίνακα επιστρέφουν true, ενώ μόνο το anchor μιας δυναμικής spill είναι κελί τύπου
Οι άμεσες τιμές και τα βαθμωτά καθορισμένα ονόματα επιστρέφουν #VALUE!, οι άκυρες αναφορές διατηρούν το #REF!, και οι παραγόμενοι πίνακες Boolean οριοθετούνται από τη FormulaArrayMemoryLimit
Το XLSX γράφει _xlfn.ISFORMULA και επαναφέρει το όνομα χωρίς πρόθεμα κατά το άνοιγμα, το ODS χρησιμοποιεί την τυπική σύνταξη of:=ISFORMULA, και η έξοδος Classic XLS απορρίπτει τη μη υποστηριζόμενη future function πριν την καταχώρηση των δεδομένων
Σύγχρονες συναρτήσεις κειμένου
Η UNICHAR περικόπτει τις αριθμητικές εισόδους προς το μηδέν και μετατρέπει τις έγκυρες τιμές Unicode scalar σε UTF-16, συμπεριλαμβανομένης της εξόδου surrogate pairs για supplementary planes και για όλα τα εύρη private-use
Το μηδέν και οι είσοδοι εκτός εύρους επιστρέφουν #VALUE!, ενώ οι μεμονωμένοι κωδικοί σημείων surrogate και οι Unicode noncharacters επιστρέφουν #N/A· οι είσοδοι εύρους και παραγόμενων πινάκων διατηρούν αυτά τα σφάλματα ανά στοιχείο
Η BAHTTEXT μετατρέπει πεπερασμένους αριθμούς σε κείμενο με μπατ και σατάνγκ της Ταϊλάνδης, στρογγυλοποιεί τις οριακές τιμές μακριά από το μηδέν στα δύο δεκαδικά ψηφία, διατηρεί το αρνητικό πρόσημο όταν το στρογγυλοποιημένο μέγεθος γίνεται μηδέν, και αναπτύσσει την επιστημονική σημειογραφία χωρίς στένωση μέσω ακέραιου τύπου
Το XLSX αποθηκεύει την UNICHAR ως _xlfn.UNICHAR και επαναφέρει το όνομα χωρίς πρόθεμα κατά το ξανάνοιγμα· η BAHTTEXT χρησιμοποιεί την τυπική ταυτότητα συναρτήσης της και παραμένει χωρίς πρόθεμα σε τύπους XLS και XLSX
Παλινδρόμηση και πρόβλεψη
Οι LINEST και LOGEST δέχονται μία ή περισσότερες στήλες ή γραμμές προβλεπτικών μεταβλητών και επιστρέφουν τους συντελεστές με τη σειρά του Excel, ακολουθούμενους από την προαιρετική σταθερά
Όταν το όρισμα των στατιστικών είναι true, και οι δύο συναρτήσεις επιστρέφουν το πλήρες αποτέλεσμα πέντε γραμμών, που περιέχει τα σφάλματα των συντελεστών, τα στατιστικά προσαρμογής, τη στατιστική F, τους βαθμούς ελευθερίας, το άθροισμα τετραγώνων της παλινδρόμησης και το άθροισμα τετραγώνων των υπολειμμάτων
Οι TREND και GROWTH χρησιμοποιούν το ίδιο πολυμεταβλητό μοντέλο και διατηρούν το σχήμα γραμμής ή στήλης των νέων τιμών προβλεπτικών που δίνονται
Επανυπολογισμός εξαρτήσεων σε Classic XLS
Η TXLSWorkbook.Recalculate χτίζει έναν γράφο εξαρτήσεων τύπων στην πρώτη της κλήση και αξιολογεί τους τύπους με σειρά precedent-first αντί για τη φυσική σειρά των κελιών
Οι επόμενες κλήσεις επαναχρησιμοποιούν τον γράφο και επανυπολογίζουν μόνο τα μεταβατικά εξαρτώμενα των αλλαγμένων τιμών και τους volatile τύπους· οι επεξεργασίες τύπων, τα ονόματα, η δομή του φύλλου εργασίας και οι επαναγραφές αναφορών ακυρώνουν και ξαναχτίζουν τον γράφο με ασφάλεια
Οι κυκλικές αναφορές χρησιμοποιούν τις κλασικές ρυθμίσεις του βιβλίου εργασίας EnableIteration, MaxIterations και MaxIterationChange, ενώ με UseFullPrecision=False η ακρίβεια εμφάνισης των αριθμών εφαρμόζεται στα αποθηκευμένα αποτελέσματα και στους κατάντι υπολογισμούς τους
Εξαρτήσεις καθορισμένων ονομάτων
Ο σταδιακός υπολογισμός ακολουθεί τα ονόματα εμβέλειας βιβλίου εργασίας και φύλλου εργασίας μέσα από εμφωλευμένους τύπους και αναφορές πολλαπλών περιοχών
Οι άκυκλοι τύποι ονομάτων συνεισφέρουν τις ακριβείς εξαρτήσεις κελιών τους, ενώ οι αναδρομικοί κύκλοι ονομάτων κάνουν ασφαλή fallback σε volatile επανυπολογισμό
Πίνακες δεδομένων What-If
Και τα φύλλα εργασίας κλασικού XLS και τα σύγχρονα XLSX μπορούν να δημιουργήσουν, να υπολογίσουν, να διαβάσουν, να γράψουν, να αντιγράψουν και να προσαρμόσουν δομικά πίνακες δεδομένων What-If με μία ή δύο μεταβλητές
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Το εύρος αποτελεσμάτων περιέχει μόνο τα υπολογισμένα κελιά εξόδου, ενώ οι τύποι και οι δοκιμαστικές τιμές χρησιμοποιούν τα γύρω κελιά με την ίδια διάταξη όπως στο Excel
- Πίνακας με είσοδο στήλης — αφήστε το
ARowInputCellκενό, βάλτε έναν τύπο πηγής πάνω από κάθε στήλη αποτελεσμάτων και βάλτε τις δοκιμαστικές τιμές αριστερά από τις γραμμές αποτελεσμάτων - Πίνακας με είσοδο γραμμής — αφήστε το
AColumnInputCellκενό, βάλτε έναν τύπο πηγής αριστερά από κάθε γραμμή αποτελεσμάτων και βάλτε τις δοκιμαστικές τιμές πάνω από τις στήλες αποτελεσμάτων - Πίνακας με δύο μεταβλητές — δώστε και τα δύο κελιά εισόδου, βάλτε τον τύπο πηγής πάνω και αριστερά από το εύρος αποτελεσμάτων, τις δοκιμαστικές τιμές εισόδου γραμμής πάνω από τα αποτελέσματα και τις δοκιμαστικές τιμές εισόδου στήλης αριστερά
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;
Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;
Αυτό το παράδειγμα με είσοδο στήλης υπολογίζει 3, 5 και 7 στα D2:D4· κάθε δοκιμαστική τιμή εφαρμόζεται μέσω ενός απομονωμένου πλαισίου υπολογισμού, έτσι ώστε οι τύποι που φτάνουν στο B1 έμμεσα, μέσω άλλων κελιών τύπων, να επανυπολογίζονται σωστά
Η AddDataTable επιστρέφει nil για άκυρο εύρος, άκυρη αναφορά εισόδου ή όταν και οι δύο αναφορές εισόδου είναι κενές· η συλλογή DataTables του φύλλου εργασίας εκθέτει τον παραγόμενο ορισμό και τις σημαίες διαγραμμένων εισόδων του
Η διαγραφή ενός αναφερόμενου κελιού εισόδου διατηρεί τον ορισμό του πίνακα και επιστρέφει #REF! για τις εξόδους του, όπως ακριβώς προβλέπει η σημασιολογία του αποθηκευμένου βιβλίου εργασίας
Συναρτήσεις καθορισμένες από τον χρήστη
Επεκτείνετε τη μηχανή τύπων με προσαρμοσμένη επιχειρησιακή λογική· καταχωρήστε τις δικές σας συναρτήσεις χρησιμοποιώντας τα παρακάτω συμβάντα
Τα επικίνδυνα εξωτερικά ονόματα και τα ονόματα σε στυλ macro αποκλείονται πριν από την εκτέλεση των ορισμάτων ή των handlers, εκτός αν το βιβλίο εργασίας ή η μεμονωμένη αξιολόγηση βάσει πλαισίου ενεργοποιήσει ρητά την AllowUnsafeFormulaCallbacks
- Το συμβάν OnUserFunction — Χειρισμός βασικών συναρτήσεων καθορισμένων από τον χρήστη
- Το συμβάν OnUserFunctionEx — Επίλυση σύνθετων συναρτήσεων με παραμέτρους περιοχής κελιών
- Επανάκληση συνάρτησης χρήστη — Απαιτήσεις υπογραφής για εξωτερικούς χειριστές