API άμεσης ανάγνωσης και εγγραφής
Τα TXLSDirectReader και TXLSDirectWriter επεξεργάζονται πακέτα XLSX χωρίς να διατηρούν πλήρες πλέγμα φύλλου εργασίας στη μνήμη, οπότε οι κλήσεις API που περιγράφουν ένα φύλλο πρέπει να γίνονται πριν ή κατά τη διάρκεια της αντίστοιχης φάσης ροής
Κύκλος ζωής εγγραφής και τιμές κελιών
Το TXLSDirectWriter.BeginFile ή BeginStream ξεκινά ένα πακέτο, οι μέθοδοι φύλλου ορίζουν ένα φύλλο εργασίας κάθε φορά και το Finish οριστικοποιεί το τελικό πακέτο
| Κελιά βαθμωτών τιμών | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime και WriteError |
| Κελιά τύπων | Τα WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime και WriteFormulaError δέχονται αποθηκευμένα αποτελέσματα που παρέχει ο καλών |
| Κοινές συμβολοσειρές | Το UseSharedStrings ενεργοποιεί την αφαίρεση διπλοτύπων συμβολοσειρών σε επίπεδο πακέτου |
| Στατιστικά | Το CellCount αναφέρει τον αριθμό των εκπεμπόμενων κελιών |
| Τμήματα | Η FreezePanes(ColSplit, RowSplit) γράφει παγωμένο διαχωρισμό στη δοσμένη στήλη και γραμμή με βάση το 1 |
Οι σειρές και οι στήλες ξεκινούν από το 1 στη δημόσια επιφάνεια εγγραφής και πρέπει να παρέχονται με τη σειρά του φύλλου εργασίας προς τα εμπρός
Επαναχρησιμοποιήσιμα στυλ
Το AddCellStyle καταχωρίζει ένα αμετάβλητο handle στυλ σε επίπεδο πακέτου και το CloneCellStyle προέρχεται από νέο handle χωρίς να διατηρεί σειρές φύλλου εργασίας
Ονοματισμένα ονόματα και υπερσύνδεσμοι
Τα AddDefinedName, AddLocalDefinedName, AddDefinedRange και AddLocalDefinedRange προσθέτουν ονόματα σε επίπεδο βιβλίου εργασίας ή φύλλου πριν από την οριστικοποίηση του πακέτου
Τα AddHyperlink, AddHyperlinkRange, AddInternalHyperlink και AddInternalHyperlinkRange εκπέμπουν εξωτερικές σχέσεις ή εσωτερικές θέσεις φύλλου για ένα κελί ή μια περιοχή
Επικύρωση δεδομένων
Τα AddDataValidation και AddDataValidationSqRef εκθέτουν την πλήρη επιφάνεια κανόνων, ενώ τα AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation και AddCustomValidation παρέχουν τυποποιημένους βοηθούς
Υπό όρους μορφοποίηση
Τα AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors και AddConditionalFormatNotContainsErrors προσθέτουν κανόνες βαθμωτών τιμών
Τα AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 και AddConditionalFormatIconSet προσθέτουν οπτικούς κανόνες· το ClearConditionalFormats αφαιρεί τους εκκρεμείς κανόνες για το τρέχον φύλλο
AutoFilter και πίνακες
Τα AddAutoFilterValue, AddAutoFilterDateGroup και AddAutoFilterSortCondition διαμορφώνουν το φίλτρο του φύλλου εργασίας
Το AddTable δημιουργεί ένα τμήμα πίνακα και τα AddTableFilterValue, AddTableFilterDateGroup και AddTableSortCondition διαμορφώνουν την κατάσταση φίλτρου και ταξινόμησής του
Προστασία και αλλαγές σελίδας
Τα ProtectSheet, UnprotectSheet, AddProtectedRange και ClearProtectedRanges διαμορφώνουν την προστασία φύλλου εργασίας· τα ProtectWorkbook και UnprotectWorkbook διαμορφώνουν τη δομή του βιβλίου εργασίας και τα κλειδώματα παραθύρων
Τα AddHorizontalPageBreak και AddVerticalPageBreak εκπέμπουν χειροκίνητες αλλαγές σελίδας για το τρέχον φύλλο εργασίας
Διαγνωστικά αποθήκευσης της άμεσης ανάγνωσης
Το TXLSDirectReader.SharedStringMemoryLimit περιορίζει τη μνήμη των αποκωδικοποιημένων κοινών συμβολοσειρών, το SharedStringsOnDisk αναφέρει τη μετεγκατάσταση σε προσωρινή αποθήκευση με ευρετήριο, το SharedStringCount αναφέρει τον αριθμό των φορτωμένων εγγραφών και το ParallelDiag εκθέτει διαγνωστικά του οριοθετημένου παράλληλου αναλυτή
Προβολή αναγνώστη και κατάσταση τύπων
Τα FirstRow, LastRow, IncludeColumn και ClearColumnProjection ωθούν την επιλογή γραμμών και στηλών με βάση το 1 μέσα στον parser του φύλλου εργασίας, πριν τη δέσμευση τιμών, τύπων ή rich-text
Το IncludeFormulaText έχει προεπιλογή true· η απενεργοποίησή του κρατά αποθηκευμένες τιμές, συντεταγμένες, στυλ και HasFormula, ενώ το FormulaTextAvailable γίνεται false και το Formula παραμένει κενό
Δρομέας σειρών
Η TXLSRowCursor.Open δέχεται αρχεία ή ροές XLS, XLSX, XLSM, ODS, CSV και TSV· η αυτόματη ανίχνευση ZIP διακρίνει πακέτα ODS από βιβλία εργασίας Open XML πριν ανοίξει ένα φύλλο
Τα TXLSRowCursor.SelectSheet και SelectSheetByName επιλέγουν ένα φύλλο εργασίας· τα SheetCount, SheetNames, SheetIndex, RowIndex και Eof εκθέτουν την κατάσταση διάσχισης, ενώ το SharedStringMemoryLimit εφαρμόζει την ίδια οριοθετημένη πολιτική κοινών συμβολοσειρών με την άμεση ανάγνωση
Τα FirstRow, LastRow, IncludeColumn και ClearColumnProjection χρησιμοποιούν τα ίδια φίλτρα με βάση το 1 σε όλες τις μορφές του cursor· οι pass options δεν μπορούν να αλλάξουν μεταξύ FindFirst και EOF, αλλά γίνονται πάλι μεταβαλλτά μετά από EOF, επιλογή φύλλου ή κλείσιμο
Κάθε TXLSRowCursorCell αναφέρει το HasFormula ανεξάρτητα από το FormulaTextAvailable· το classic XLS εκθέτει παρουσία τύπου και αποθηκευμένα αποτελέσματα χωρίς να ισχυρίζεται διαθέσιμο κείμενο tokens, ενώ το IncludeFormulaText μπορεί να καταστείλει το κείμενο τύπων XLSX και ODS πριν τη συσσώρευση
Η διάσχιση ODS κρατά ένα φυσικό πρότυπο γραμμής, περικόπτει τα επαναλαμβανόμενα blocks γραμμών στο ζητούμενο διάστημα, μεταβαίνει απευθείας μεταξύ επιλεγμένων στηλών μέσα σε επαναλαμβανόμενα spans, προχωρά πάνω από καλυμμένα κελιά χωρίς να τα επιστρέψει ως τιμές, και αναφέρει άκυρους ή στο πλέγμα οριοθετημένους μετρητές επαναλήψεων μέσω OnSkippedRecord
Το State διακρίνει xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled και xrcsFaulted· το Cancel είναι idempotent, ακυρώνει την τρέχουσα γραμμή και απελευθερώνει τη ροή του ενεργού φύλλου διατηρώντας την πηγή, ώστε μια ρητή επιλογή φύλλου να ξεκινήσει νέο πέρασμα
Το overload ροής έχει προεπιλογή xsoBorrowed, επαναφέρει την αρχική θέση του καλούντα στο κλείσιμο, και δέχεται xsoOwned για μεταβίβαση ιδιοκτησίας μετά από επιτυχές άνοιγμα· τα αποτυχημένα ανοίγματα δεν καταναλώνουν ποτέ την ιδιοκτησία του καλούντα
Η CurrentRowView δανείζεται τον πίνακα της τρέχουσας γραμμής χωρίς αντιγραφή και ελέγχει μια γενιά πριν από κάθε πρόσβαση· η προώθηση, η επιλογή, η ακύρωση, το κλείσιμο ή η καταστροφή του cursor ακυρώνει την προβολή και προκαλεί EXLSRowCursorViewInvalidated σε μελλοντική πρόσβαση
Το PeakRowBufferedBytes είναι μια μονότονη εκτίμηση από το πιο πρόσφατο Open των εγγραφών κελιών, των managed payloads, του rich text και των δεδομένων format-backend που διατηρούνται για μία λογική γραμμή· προορίζεται για διαγνωστικά παλινδρόμησης οριοθετημένης μνήμης και όχι για ακριβή λογιστική του heap
Το SheetPassesStarted μετρά τις επιτυχείς εκκινήσεις backend φύλλου εργασίας· η εξέταση ονομάτων φύλλων ή η παράλειψη φύλλου μέσω του facade callback δεν ανοίγει το part του φύλλου εργασίας
Πρόσοψη callback προς τα εμπρός
Ο TXLSForwardReader αναθέτει την αποκωδικοποίηση XLS, XLSX, ODS, CSV και TSV στον TXLSRowCursor, μετατρέπει κάθε κελί της τρέχουσας γραμμής σε callback OnCell, και διατηρεί τα ίδια συμβόλαια για όρια γραμμών, προβολή στηλών, κατάσταση τύπων, rich text, κωδικό, παραλειπόμενες εγγραφές, θέση ροής και οριοθετημένο buffer
Τα PeakRowBufferedBytes και SheetPassesStarted εκθέτουν τα κοινά διαγνωστικά του cursor στην επιφάνεια callback, ενώ το classic XLS διατηρεί επιπλέον τα ClassicBytesRead και ClassicPeakBufferedBytes
Γεγονότα αναγνώστη και τύποι εγγραφών
Ο αναγνώστης και ο row cursor εκθέτουν προαιρετικά callbacks και απλούς τύπους, όλους δηλωμένους στο lxDirectRead. Κάθε callback ακολουθεί το ίδιο σχήμα: η εγγραφή περιγράφει ένα στοιχείο σε ροή, και η ορισμός του Abort σταματά τη σάρωση (τα γεγονότα φύλλου δέχονται επιπλέον SkipSheet)
| Κελιά | Η OnCell (τύπος TXLSDirectCellEvent) παραδίδει ένα TXLSDirectCell ανά κελί, του οποίου το Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) επιλέγει το populated πεδίο τιμής· το rich text ταξιδεύει ως TXLSDirectRichText με εγγραφές TXLSDirectRichTextRun, καθεμία με TXLSDirectRichColor (είδος TXLSDirectRichColorKind), TXLSDirectRichUnderline και TXLSDirectRichVertAlign, συν προαιρετικά δεδομένα TXLSDirectPhoneticProperties και TXLSDirectPhoneticRun |
| Πλαίσιο φύλλου | Η OnSheet (TXLSDirectSheetEvent) μπορεί να παραλείψει ένα ολόκληρο φύλλο εργασίας πριν αναλυθούν τα κελιά του· η OnSkippedRecord (TXLSDirectSkippedEvent) αναφέρει κακοδιατυπωμένο ή κομμένο περιεχόμενο με το id εγγραφής και τον λόγο |
| Διάταξη φύλλου | Οι OnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge και OnPane παραδίδουν εγγραφές TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge και TXLSDirectPane· η κατάσταση panes χρησιμοποιεί TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Κατάσταση cursor | Το TXLSRowCursor.State είναι ένα TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted)· το overload ροής της Open παίρνει ένα TXLSStreamOwnership (προεπιλογή xsoBorrowed, xsoOwned για μεταβίβαση ιδιοκτησίας), και η CurrentRowView επιστρέφει μια δανεισμένη προβολή IXLSRowCursorView της οποίας η ιδιότητα Valid προστατεύει την πρόσβαση και της οποίας η ValueByCol διαβάζει ένα κελί της δανεισμένης γραμμής χωρίς αντιγραφή· η προβολή ακυρώνεται όταν ο cursor προχωρήσει |
Τύποι παραμέτρων και στυλ του writer
Οι τυποποιημένοι βοηθοί του writer (lxDirectWrite) δέχονται εγγραφές και enums ώστε οι κλήσεις να μένουν χωρίς δεσμεύσεις: η WriteRichString παίρνει ένα TXLSDirectRichText· η AddCellStyle χτίζει ένα στυλ επιπέδου πακέτου από ένα TXLSDirectCellStyle του οποίου η στοίχιση (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), η υπογράμμιση (TXLSDirectUnderline), το pattern γεμίσματος (TXLSDirectFillPattern) και οι πλευρές περιγράμματος (TXLSDirectStyleBorder με TXLSDirectBorderSide) κατοπτρίζουν το μοντέλο στυλ OOXML. Η μορφοποίηση υπό όρους περνά ένα TXLSDirectConditionalFormat με TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind και TXLSDirectIconSetType, η επικύρωση δεδομένων ένα TXLSDirectDataValidation, οι πίνακες ένα TXLSDirectTable, οι υπερσύνδεσμοι ένα TXLSDirectHyperlink, τα ονομασμένα ονόματα ένα TXLSDirectDefinedName, τα διαφορικά στυλ ένα TXLSDirectDxfStyle, τα σχόλια ένα TXLSDirectComment, οι εικόνες ένα TXLSDirectImage με TXLSDirectImageFormat, τα γραφήματα ένα TXLSDirectChart με TXLSDirectChartSeries και TXLSDirectChartType, τα merges ένα TXLSDirectMergeRange, τα προστατευμένα εύρη ένα TXLSDirectProtectedRange, η προστασία φύλλου ένα σύνολο TXLSDirectSheetProtectionOptions από TXLSDirectSheetProtectionOption, η κατάσταση ταξινόμησης auto-filter ένα TXLSDirectSortState, οι επιλογές στήλης ένα TXLSDirectColumnOption, και η γεωμετρία σελίδας μια εγγραφή TXLSDirectPageMargins
TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
var Eof: Boolean) of object;
function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
Η OnNeedRow τραβάει γραμμές από την εφαρμογή: ο προμηθευτής γράφει τα κελιά της γραμμής κατευθείαν μέσω του writer και αφήνει Eof = False, ή δηλώνει εξάντληση με Eof = True για να σταματήσει ο βρόχος. Οι βοηθοί μετατρέπουν μεταξύ συντεταγμένων και primitives προστασίας: η XLSDirectColName αποδίδει μια στήλη με βάση το μηδέν στα γράμματά της A1, η XLSDirectParseRef αναλύει μια αναφορά κελιού A1, και η XLSDirectPasswordHash υπολογίζει το legacy password hash που αποθηκεύουν οι εγγραφές προστασίας φύλλου