Μέθοδος CreateReadOnlyView
Δημιουργεί μια ελαφριά προβολή μόνο για ανάγνωση πάνω από ένα φορτωμένο μοντέλο βιβλίου εργασίας Classic ή XLSX
Σύνταξη
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
Το CreateReadOnlyView δηλώνεται από το κλασικό IXLSWorkbook στο lxHandle και από το XLSX IXLSXWorkbookOwner στο lxHandleX· η κοινή διεπαφή προβολής, οι επιλογές και οι τύποι στιγμιότυπων δηλώνονται στο lxStandard
Κατάσταση και διάρκεια ζωής της προβολής
Η δημιουργία μιας προβολής έχει σταθερό κόστος και δεν διασχίζει φύλλα εργασίας, κελιά, στυλ, ονόματα ή σχέδια
Κάθε προβολή διαθέτει το δικό της ActiveSheetIndex με αρίθμηση από τη μονάδα, ώστε αρκετές προβολές να μπορούν να επιλέξουν διαφορετικά φύλλα εργασίας χωρίς αλλαγή του κλασικού ActiveSheetIndex ή των XLSX ActiveIndex, IsSelected και ActiveTab
Η προβολή κρατά μια μίσθωση ανάγνωσης όσο υπάρχει, και οι μεταβολές του βιβλίου εργασίας αποτυγχάνουν άμεσα με EXLSWorkbookWriteGuardUnavailable πριν από οποιαδήποτε αλλαγή στο μοντέλο
Κρατήστε τα κλασικά βιβλία εργασίας μέσω του IXLSWorkbook και τα βιβλία εργασίας XLSX μέσω του IXLSXWorkbookOwner όταν χρησιμοποιείτε προβολές· η διεπαφή κατόχου και κάθε προβολή διατηρούν τότε την ίδια αναφερόμενη με μετρητή αναφορών αναφορά στο βιβλίο εργασίας και μπορούν να απελευθερωθούν με οποιαδήποτε σειρά
Μην καλείτε το Free σε ένα συγκεκριμένο TXLSWorkbook ή TXLSXWorkbook όσο κάποια διεπαφή κατόχου ή προβολή εξακολουθεί να το αναφέρει
Στιγμιότυπα κελιών
Το TryReadCell χρησιμοποιεί συντεταγμένες σειράς και στήλης με αρίθμηση από τη μονάδα στο ενεργό φύλλο της προβολής και επιστρέφει False μόνο όταν δεν υπάρχει αποθηκευμένο κελί σε αυτή τη συντεταγμένη
Μια ανάγνωση ελλιπούς κελιού δεν δημιουργεί αποθήκευση ούτε προωθεί τη γενιά του βιβλίου εργασίας
Το TXLSReadOnlyCellSnapshot κατέχει το όνομα φύλλου, την τιμή, το κείμενο τύπου, τις πληροφορίες cache και αξιολόγησης, τις συντεταγμένες, το είδος και το ευρετήριο στυλ του, και δεν εκθέτει ποτέ εγγράψιμο αντικείμενο βιβλίου εργασίας
| Πεδίο | Σημασία |
|---|---|
SheetIndex / SheetName | Τοπική ταυτότητα φύλλου εργασίας της προβολής |
Row / Col | Συντεταγμένες κελιού με αρίθμηση από τη μονάδα |
StyleIndex | Αποθηκευμένο ευρετήριο κλασικού XF ή ευρετήριο μορφής κελιού XLSX |
Kind | Κατηγοριοποίηση σε κείμενο, αριθμό, ημερομηνία-ώρα, Boolean, τύπο, σφάλμα ή κενό |
Value | Αποθηκευμένη βαθμωτή τιμή ή τιμή από cache τύπου, χωρίς επανυπολογισμό |
HasFormulaCache / FormulaCache | Παρουσία cache τύπου, προέλευση, είδος τιμής και ιδιόκτητη cached τιμή |
FormulaEvaluation | Αν η αξιολόγηση δεν ίσχυε, δεν ζητήθηκε, υπολογίστηκε ή απέτυχε, μαζί με τον κωδικό αποτελέσματος του evaluator και την ιδιόκτητη τιμή αποτελέσματος |
Formula | Κενό από προεπιλογή και συμπληρώνεται μόνο όταν το κείμενο τύπου είναι ρητά ενεργοποιημένο |
Πολιτική τύπων
Από προεπιλογή τα κελιά τύπων χρησιμοποιούν την υπάρχουσα αποθηκευμένη cache και δεν υπολογίζουν ποτέ, δεν καλούν συνάρτηση χρήστη, δεν ενημερώνουν την κατάσταση dirty ούτε γράφουν cache πίσω στο βιβλίο εργασίας
Προσθέστε το xlsvIncludeFormulaText στις Options όταν απαιτείται κείμενο τύπου· το Classic δημιουργεί κατά ζήτηση έναν ιδιωτικό decoder της προβολής, ενώ το XLSX αντιγράφει την αποθηκευμένη συμβολοσειρά τύπου του, και καμία από τις δύο διαδρομές δεν αρχικοποιεί ή τροποποιεί τον υπολογιστή του βιβλίου εργασίας
Ένας τύπος χωρίς φορτωμένη ή υπολογισμένη cache αναφέρει HasFormulaCache=False και αφήνει την Value ως Unassigned
Προσθέστε το xlsvEvaluateFormulas για να αξιολογηθούν οι τύποι μέσω ενός ιδιωτικού υπολογιστή της προβολής, κατάστασης αναδρομής, cache βαθμωτών τιμών, cache πινάκων-μητρών και cache μεταγλωττισμένων τύπων XLSX· η προκύπτουσα Value και η FormulaEvaluation.Value δεν αντικαθιστούν ποτέ την αποθηκευμένη cache του βιβλίου εργασίας ή τα πεδία χρόνου εκτέλεσης μεταγλωττισμένων τύπων
Τα τυπικά σφάλματα υπολογιστικού φύλλου επιστρέφονται ως τιμές σφάλματος Variant με xlfesCalculated, ενώ οι μη υποστηριζόμενες ή εσωτερικές αποτυχίες αξιολόγησης αναφέρουν xlfesFailed και διατηρούν την αρχική αποθηκευμένη cache στο FormulaCache
Οι επαναλαμβανόμενες αναγνώσεις μέσω μιας προβολής επαναχρησιμοποιούν τον ιδιωτικό cache αξιολόγησής της για τη γενιά της μίσθωσης, ενώ διαφορετικές προβολές παραμένουν ανεξάρτητες και μπορούν να αξιολογήσουν ταυτόχρονα τον ίδιο κοινόχρηστο τύπο
Η αξιολόγηση εξωτερικών τύπων XLSX διαβάζει μόνο την cache του externalLink τοπική στο αρχείο και δεν αναφέρεται ποτέ σε αδύναμη καταχώριση ζωντανού βιβλίου εργασίας ούτε εκτελεί εξωτερικό I/O
Νήματα και απόδοση
Χρησιμοποιήστε μία προβολή ανά νήμα εργασίας· ξεχωριστές προβολές μπορούν να σαρώνουν διαφορετικά φύλλα εργασίας ή να αξιολογήσουν τον ίδιο τύπο ταυτόχρονα, ενώ οι καλούντες δεν πρέπει να μεταβάλλουν το ενεργό φύλλο ή τις επιλογές μιας προβολής από άλλο νήμα
Μετά τη δημιουργία, οι συνηθισμένες αναγνώσεις κελιών δεν εισέρχονται σε monitor ή κρίσιμο τμήμα, επειδή η μίσθωση αποτρέπει ταυτόχρονη μεταβολή του βιβλίου εργασίας
Η επικύρωση απελευθέρωσης κρατά κάθε αδρανή προβολή κάτω από 64 KiB σταθερής κατάστασης, εκατό αδρανείς προβολές κάτω από 8 MiB, και τη δημιουργία προβολής ανεξάρτητη από το μέγεθος του βιβλίου εργασίας με ένα όριο p95 ενός χιλιοστοδευτερόλεπτου σε μοντέλο ενός εκατομμυρίου κελιών
Η σουίτα απόδοσης περιορίζει επίσης την επίδραση μιας αδρανούς προβολής στις υπάρχουσες μονόνημες σαρώσεις cursor στο πέντε τοις εκατό και απαιτεί οκτώ προβολές που σαρώνουν ανεξάρτητα φύλλα εργασίας να επιτύχουν τουλάχιστον πενταπλάσιο throughput από μία προβολή στον υπολογιστή επικύρωσης
Παράδειγμα
var
Workbook: IXLSWorkbook;
View: IXLSReadOnlyWorkbookView;
Cell: TXLSReadOnlyCellSnapshot;
begin
Workbook := TXLSWorkbook.Create;
Workbook.Sheets.Add;
Workbook.Sheets[1].Cells[1, 1].Value := 'ready';
View := Workbook.CreateReadOnlyView;
View.Options := [xlsvEvaluateFormulas];
if View.TryReadCell(1, 1, Cell) then
Memo1.Lines.Add(VarToStr(Cell.Value));
end;
Για XLSX, διατηρήστε το συγκεκριμένο βιβλίο εργασίας μέσω της διεπαφής κατόχου του πριν δημιουργήσετε προβολές
var
Owner: IXLSXWorkbookOwner;
Workbook: TXLSXWorkbook;
View: IXLSReadOnlyWorkbookView;
begin
Workbook := TXLSXWorkbook.Create;
Owner := Workbook;
Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
View := Owner.CreateReadOnlyView;
end;