HotXLS-documentatie

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 cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime, and WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime, and WriteFormulaError accept caller-supplied cached results
Shared stringsUseSharedStrings enables package-level string deduplication
StatisticsCellCount reports the number of emitted cells
PanesFreezePanes(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)

CellsOnCell (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 framingOnSheet (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 layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge, and OnPane deliver TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge, and TXLSDirectPane records; pane state uses TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.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

Zie ook