Direct reader and writer API
TXLSDirectReader en TXLSDirectWriter verwerken XLSX-packages zonder een volledig werkbladraster in het geheugen te houden, dus API-aanroepen die een blad beschrijven moeten vóór of tijdens de bijbehorende streamingfase worden gedaan
Writer-levenscyclus en celwaarden
TXLSDirectWriter.BeginFile of BeginStream start een package, de sheet-methoden definiéren één werkblad tegelijk en Finish legt het uiteindelijke package vast
| Scalar cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime, and WriteError |
| Formula cells | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime, and WriteFormulaError accept caller-supplied cached results |
| Shared strings | UseSharedStrings enables package-level string deduplication |
| Statistics | CellCount reports the number of emitted cells |
| Panes | FreezePanes(ColSplit, RowSplit) writes a frozen split at the given one-based column and row |
Rijen en kolommen zijn op 1 gebaseerd in het openbare writersoppervlak en moeten in vooruitlopende werkbladvolgorde worden aangeleverd
Werkbladpatch-levenscyclus
BeginPatch vervangt één werkblad of voegt een nieuw werkblad in terwijl onaangeroerde packageonderdelen behouden blijven. Mislukte initialisatie geeft de handles van bronarchief en bronstream onmiddellijk vrij, ook bij een ontbrekend werkblad, een ontbrekend verplicht packageonderdeel, een ongeldig archief of een mislukte bestemmingaanmaak. Bronbestanden en tijdelijke registraties eigendom van de aanroeper blijven de verantwoordelijkheid van de aanroeper; vrijgegeven handles maken het mogelijk om die bronnen te verwijderen of vrij te geven
Close en destructie geven bronhandles vrij, ook wanneer er geen actieve bestemming is of de patchafronding een exception gooit. Een mislukte bestemmingvervanging houdt de uitvoer in staging ter inspectie vast, en de writer kan na een mislukte initialisatie een volgende patch of een gewone bestandsoperatie starten
Hergebruikbare stijlen
AddCellStyle registreert een immutabele stijlhandle op packageniveau en CloneCellStyle leidt een nieuwe handle af zonder werkbladrijen vast te houden
Gedefinieerde namen en hyperlinks
AddDefinedName, AddLocalDefinedName, AddDefinedRange en AddLocalDefinedRange voegen namen op werkmap- of bladniveau toe vóór de afronding van het package
AddHyperlink, AddHyperlinkRange, AddInternalHyperlink en AddInternalHyperlinkRange schrijven externe relaties of interne bladlocaties voor één cel of een bereik
Gegevensvalidatie
AddDataValidation en AddDataValidationSqRef tonen het volledige regeloppervlak, terwijl AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation en AddCustomValidation getypeerde helpers voor de gangbare regelsoorten bieden
Voorwaardelijke opmaak
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors en AddConditionalFormatNotContainsErrors voegen scalaire regels toe
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 en AddConditionalFormatIconSet voegen visuele regels toe; ClearConditionalFormats ruimt ze per werkblad op
AutoFilter en tabellen
AddAutoFilterValue, AddAutoFilterDateGroup en AddAutoFilterSortCondition configureren de autofilter van het werkblad
AddTable maakt een table-part, en AddTableFilterValue, AddTableFilterDateGroup en AddTableSortCondition configureren de filter- en sorteerstatus ervan
Beveiliging en pagina-einden
ProtectSheet, UnprotectSheet, AddProtectedRange en ClearProtectedRanges configureren werkbladbeveiliging; ProtectWorkbook en UnprotectWorkbook configureren de werkmapstructuurbeveiliging
AddHorizontalPageBreak en AddVerticalPageBreak schrijven handmatige pagina-einden voor het huidige werkblad
Opslagdiagnostiek van de directe reader
TXLSDirectReader.SharedStringMemoryLimit begrenst het geheugen voor gedecodeerde shared strings, SharedStringsOnDisk rapporteert migratie naar tijdelijke geïndexeerde opslag, SharedStringCount rapporteert het aantal geladen items, en ParallelDiag stelt de afgebakende diagnostiek van de parallelle parser bloot
Reader-projectie en formulestatus
FirstRow, LastRow, IncludeColumn en ClearColumnProjection duwen rij- en kolomselectie (op 1 gebaseerd) in de werkbladparser vóór de toewijzing van waarden, formules of rich text
IncludeFormulaText staat standaard op true; uitschakelen houdt gecachte waarden, coördinaten, stijlen en HasFormula aan, terwijl FormulaTextAvailable false wordt en Formula leeg blijft
Rijcursor
TXLSRowCursor.Open accepteert XLS-, XLSX-, XLSM-, ODS-, CSV- en TSV-bestanden of -streams; ZIP-automatische detectie onderscheidt ODS-packages van Open XML-werkmappen voordat een blad wordt geopend
SelectSheet en SelectSheetByName kiezen een werkblad; SheetCount, SheetNames, SheetIndex, RowIndex en Eof tonen de traversatiestatus, terwijl SharedStringMemoryLimit hetzelfde begrensde shared-string-beleid toepast als de directe reader
FirstRow, LastRow, IncludeColumn en ClearColumnProjection gebruiken dezelfde op 1 gebaseerde filters voor alle cursorformaten; pass-opties kunnen niet wijzigen tussen FindFirst en EOF maar worden na EOF, bladkeuze of sluiten weer mutabel
Elke TXLSRowCursorCell rapporteert HasFormula onafhankelijk van FormulaTextAvailable; klassieke XLS toont de aanwezigheid van formules en gecachte resultaten zonder niet-beschikbare tokentekst te claimen, terwijl IncludeFormulaText de formuletekst van XLSX en ODS vóór accumulatie kan onderdrukken
ODS-traversatie houdt één fysieke rijtemplate aan, knipt herhaalde rijblokken af op het gevraagde interval, springt direct tussen geselecteerde kolommen binnen herhaalde spans, loopt vooruit over gedekte cellen zonder ze als waarden terug te geven en meldt ongeldige of door het raster begrensde herhaaltellingen via OnSkippedRecord
State onderscheidt xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled en xrcsFaulted; Cancel is idempotent, maakt de huidige rij ongeldig en geeft de actieve werkbladstream vrij terwijl de bron behouden blijft, zodat een expliciete bladkeuze een nieuwe pass kan starten
De stream-overload staat standaard op xsoBorrowed, herstelt de beginpositie van de aanroeper bij het sluiten en accepteert xsoOwned om het eigendom over te dragen na een geslaagde open; mislukte opens consumeren het eigendom van de aanroeper nooit
CurrentRowView leent de huidige rijarray zonder te kopiëren en controleert een generatie bij elke toegang; vooruitschuiven, selecteren, annuleren, sluiten of vernietigen van de cursor maakt de view ongeldig en veroorzaakt EXLSRowCursorViewInvalidated bij latere toegang
PeakRowBufferedBytes is een monotoon gemiddelde sinds de meest recente Open van de celrecords, beheerde payloads, rich text en backendgegevens die voor één logische rij worden vastgehouden; bedoeld voor regressiediagnostiek met begrensd geheugen in plaats van exacte heap-boekhouding
SheetPassesStarted telt geslaagde starts van werkbladbackends; het bekijken van bladnamen of het overslaan van een blad via de callbackfacade opent het worksheet-part niet
Forward-callbackadapter
TXLSForwardReader delegeert de XLS-, XLSX-, ODS-, CSV- en TSV-decodering aan TXLSRowCursor, zet elke cel van de huidige rij om in een OnCell-callback en behoudt dezelfde contracten voor rijgrenzen, kolomprojectie, formulestatus, rich text, wachtwoord, overgeslagen records, streampositie en begrensde buffers
PeakRowBufferedBytes en SheetPassesStarted tonen de gedeelde cursordiagnostiek op het callbackoppervlak, terwijl klassieke XLS bovendien ClassicBytesRead en ClassicPeakBufferedBytes bewaart
Reader-events en recordtypen
De reader en de rijcursor tonen optionele callbacks en platte records, allemaal gedeclareerd in lxDirectRead. Elke callback heeft dezelfde vorm: het record beschrijft één gestreamd item en het zetten van Abort stopt de scan (sheet-events accepteren bovendien SkipSheet)
| Cells | OnCell (type TXLSDirectCellEvent) delivers a TXLSDirectCell per cell whose Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) selects the populated value field; rich text travels as a TXLSDirectRichText holding TXLSDirectRichTextRun entries, each with a TXLSDirectRichColor (kind TXLSDirectRichColorKind), TXLSDirectRichUnderline, and TXLSDirectRichVertAlign, plus optional TXLSDirectPhoneticProperties and TXLSDirectPhoneticRun data |
| Sheet framing | OnSheet (TXLSDirectSheetEvent) can skip a whole worksheet before its cells are parsed; OnSkippedRecord (TXLSDirectSkippedEvent) reports malformed or truncated content with the record id and reason |
| Sheet layout | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge, and OnPane deliver TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge, and TXLSDirectPane records; pane state uses TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Cursor state | TXLSRowCursor.State is a TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); the stream overload of Open takes a TXLSStreamOwnership (xsoBorrowed default, xsoOwned to transfer ownership), and CurrentRowView returns an IXLSRowCursorView borrowed view whose Valid property guards access and whose ValueByCol leest één cel uit de geleende rij zonder te kopiëren; de view wordt ongeldig zodra de cursor verder schuift |
Writer-parameter- en stijltypes
De getypeerde helpers van de writer (lxDirectWrite) accepteren records en enums zodat aanroepen allocatievrij blijven: WriteRichString neemt een TXLSDirectRichText; AddCellStyle bouwt een stijl op packageniveau uit een TXLSDirectCellStyle waarvan de uitlijning (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), onderstreping (TXLSDirectUnderline), vulpatroon (TXLSDirectFillPattern) en randzijden (TXLSDirectStyleBorder met TXLSDirectBorderSide) het OOXML-stijlmodel spiegelen. Voorwaardelijke opmaak geeft een TXLSDirectConditionalFormat door met TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind en TXLSDirectIconSetType, gegevensvalidatie een TXLSDirectDataValidation, tabellen een TXLSDirectTable, hyperlinks een TXLSDirectHyperlink, gedefinieerde namen een TXLSDirectDefinedName, differentiële stijlen een TXLSDirectDxfStyle, opmerkingen een TXLSDirectComment, afbeeldingen een TXLSDirectImage met TXLSDirectImageFormat, grafieken een TXLSDirectChart met TXLSDirectChartSeries en TXLSDirectChartType, samenvoegingen een TXLSDirectMergeRange, beveiligde bereiken een TXLSDirectProtectedRange, bladbeveiliging een set TXLSDirectSheetProtectionOptions van TXLSDirectSheetProtectionOption, de sorteerstatus van de autofilter een TXLSDirectSortState, kolomopties een TXLSDirectColumnOption en pagegeometry een record 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 trekt rijen uit de toepassing: de leverancier schrijft de cellen van de rij rechtstreeks door de writer weg en laat Eof = False, of meldt uitputting met Eof = True om de lus te stoppen. De helpers converteren tussen coördinaten en beveiligingsprimitieven: XLSDirectColName rendert een op 0 gebaseerde kolom als zijn A1-letters, XLSDirectParseRef parseert een A1-celverwijzing en XLSDirectPasswordHash berekent de verouderde wachtwoordhash die de bladbeveiligingsrecords opslaan