Τεκμηρίωση HotXLS

Μέθοδος 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;

Δείτε επίσης