API för direkt läsare och skrivare
TXLSDirectReader och TXLSDirectWriter bearbetar XLSX-paket utan att hålla ett komplett arbetsbladsrutnät i minnet, så API-anrop som beskriver ett blad måste göras före eller under motsvarande strömningsfas
Skrivarens livscykel och cellvärden
TXLSDirectWriter.BeginFile eller BeginStream startar ett paket, bladmetoder definierar ett arbetsblad i taget och Finish bekräftar det slutliga paketet
| Scalar cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimeoch WriteError |
| Formula cells | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimeoch WriteFormulaError accepterar anropslevererade cachelagrade resultat |
| Shared strings | UseSharedStrings aktiverar paketnivåsträngdeduplicering |
| Statistics | CellCount rapporterar antalet utsända celler |
| Panes | FreezePanes(ColSplit, RowSplit) skriver en fryst delning vid den angivna enbaserade kolumnen och raden |
Rader och kolumner är enbaserade i den offentliga skrivarytan och måste levereras i framåt arbetsbladsordning
Livscykel för arbetsbladspatch
BeginPatch ersätter ett arbetsblad eller infogar ett nytt medan opåverkade paketdelar bevaras. Misslyckad initiering frigör källarkivet och källströmmen omedelbart, oavsett om ett arbetsblad saknas, en nödvändig paketdel saknas, arkivet är ogiltigt eller skapandet av destinationen misslyckas. Källfiler och tillfälliga registreringar som ägs av anroparen förblir anroparens ansvar; frigjorda handtag gör att dessa källor kan tas bort eller släppas
Close och destruktion frigör källhandtagen även när det inte finns någon aktiv destination eller när patchens slutbehandling kastar ett undantag. En misslyckad destinationersättning behåller sitt stegade utdata för inspektion, och skrivaren kan starta en efterföljande patch eller en vanlig filoperation efter ett initieringsfel
Återanvändbara stilar
AddCellStyle registrerar ett oföränderligt stilhandtag på paketnivå och CloneCellStyle härleder ett nytt handtag utan att behålla arbetsbladsrader
Definierade namn och hyperlänkar
AddDefinedName, AddLocalDefinedName, AddDefinedRangeoch AddLocalDefinedRange lägger till arbetsboks- eller bladlokala namn före paketslutförande
AddHyperlink, AddHyperlinkRange, AddInternalHyperlinkoch AddInternalHyperlinkRange sänder externa relationer eller interna bladpositioner för en cell eller ett intervall
Datavalidering
AddDataValidation och AddDataValidationSqRef exponerar den kompletta regelns yta, medan AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationoch AddCustomValidation tillhandahåller typspecifika hjälpfunktioner
Villkorlig formatering
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorsoch AddConditionalFormatNotContainsErrors lägger till skalära regler
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3och AddConditionalFormatIconSet lägger till visuella regler; ClearConditionalFormats tar bort väntande regler för det aktuella bladet
Autofilter och tabeller
AddAutoFilterValue, AddAutoFilterDateGroupoch AddAutoFilterSortCondition konfigurerar arbetsbladsfiltret
AddTable skapar en tabelldel, och AddTableFilterValue, AddTableFilterDateGroupoch AddTableSortCondition konfigurerar dess filter- och sorteringsstatus
Skydd och sidbrytningar
ProtectSheet, UnprotectSheet, AddProtectedRangeoch ClearProtectedRanges konfigurerar arbetsbladsskydd; ProtectWorkbook och UnprotectWorkbook konfigurerar arbetsbokens struktur- och fönsterlås
AddHorizontalPageBreak och AddVerticalPageBreak sänder manuella sidbrytningar för det aktuella arbetsbladet
Lagringsdiagnostik för direkt läsare
TXLSDirectReader.SharedStringMemoryLimit begränsar minnet för avkodade delade strängar, SharedStringsOnDisk rapporterar migrering till temporär indexerad lagring, SharedStringCount rapporterar antalet inlästa poster och ParallelDiag exponerar begränsad diagnostik för parallelltolknaren
Projicering och formeltillstånd för läsaren
FirstRow, LastRow, IncludeColumnoch ClearColumnProjection trycker ner rad- och enbaserat kolumnurval i arbetsbladstolkaren före allokering av värden, formler eller rich text
IncludeFormulaText är som standard sant; avstängning bevarar cachade värden, koordinater, stilar och HasFormula medan FormulaTextAvailable blir falskt och Formula förblir tomt
Radmarkör
TXLSRowCursor.Open accepterar XLS-, XLSX-, XLSM-, ODS-, CSV- och TSV-filer eller -strömmar; ZIP-automatdetektering skiljer ODS-paket från Open XML-arbetsböcker innan ett blad öppnas
SelectSheet och SelectSheetByName väljer ett arbetsblad; SheetCount, SheetNames, SheetIndex, RowIndexoch Eof exponerar traverseringsstatus, medan SharedStringMemoryLimit tillämpar samma begränsade strategi för delade strängar som den direkta läsaren
FirstRow, LastRow, IncludeColumnoch ClearColumnProjection använder samma enbaserade filter över alla markörformat; passalternativ kan inte ändras mellan FindFirst och EOF men blir muterbara igen efter EOF, bladval eller stängning
Varje TXLSRowCursorCell rapporterar HasFormula oberoende av FormulaTextAvailable; klassisk XLS exponerar formulärvaro och cachade resultat utan att påstå sig ha otillgänglig tokentext, medan IncludeFormulaText kan undertrycka XLSX- och ODS-formeltext före ackumulering
ODS-traversering håller en fysisk radmall, klipper upprepade radblock till det begärda intervallet, hoppar direkt mellan valda kolumner inuti upprepade spann, går vidare över täckta celler utan att returnera dem som värden och rapporterar ogiltiga eller rutnätsbegränsade repeat-antal via OnSkippedRecord
State skiljer mellan xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledoch xrcsFaulted; Cancel är idempotent, ogiltigförklarar den aktuella raden och släpper det aktiva arbetsbladsflödet medan källan behålls, så att ett explicit bladval kan starta ett nytt pass
Strömöverlagringen är som standard xsoBorrowed, återställer anroparens ursprungliga position vid stängning och accepterar xsoOwned för att överföra ägandet efter en lyckad öppning; misslyckade öppningar konsumerar aldrig anroparens ägande
CurrentRowView lånar den aktuella radarrayen utan att kopiera den och kontrollerar en generation vid varje åtkomst; att avancera, välja, avbryta, stänga eller förstöra markören ogiltigförklarar vyn och kastar EXLSRowCursorViewInvalidated vid senare åtkomst
PeakRowBufferedBytes är en monoton uppskattning sedan den senaste Open av cellposterna, hanterade nyttolaster, rich text och formatbackenddata som behålls för en logisk rad; den är avsedd för diagnostik av begränsat minne snarare än exakt heapbokföring
SheetPassesStarted räknar lyckade starter av arbetsbladsbackenden; att inspektera bladnamn eller hoppa över ett blad via callback-fasaden öppnar inte arbetsbladsdelen
Vidarebefordrande callback-adapter
TXLSForwardReader delegerar XLS-, XLSX-, ODS-, CSV- och TSV-avkodning till TXLSRowCursor, omvandlar varje cell på aktuell rad till en OnCell -callback och bevarar samma kontrakt för radgränser, kolumnprojicering, formeltillstånd, rich text, lösenord, överhoppade poster, strömposition och begränsad buffert
PeakRowBufferedBytes och SheetPassesStarted exponerar den gemensamma markördiagnostiken på callback-ytan, medan klassisk XLS dessutom behåller ClassicBytesRead och ClassicPeakBufferedBytes
Läsarhändelser och posttyper
Läsaren och radmarkören exponerar valfria callbacks och enkla poster, alla deklarerade i lxDirectRead. Varje callback följer samma form: posten beskriver ett strömmat objekt, och att sätta Abort stoppar skanningen (bladhändelser accepterar dessutom SkipSheet)
| Cells | OnCell (typ TXLSDirectCellEvent) levererar en TXLSDirectCell per cell vars Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) väljer det ifyllda värdfältet; rich text transporteras som en TXLSDirectRichText som bär TXLSDirectRichTextRun -poster, var och en med en TXLSDirectRichColor (typ TXLSDirectRichColorKind), TXLSDirectRichUnderlineoch TXLSDirectRichVertAlign, plus valfri TXLSDirectPhoneticProperties - och TXLSDirectPhoneticRun -data |
| Sheet framing | OnSheet (TXLSDirectSheetEvent) kan hoppa över ett helt arbetsblad innan dess celler tolkas; OnSkippedRecord (TXLSDirectSkippedEvent) rapporterar felformaterat eller avklippt innehåll med post-id och orsak |
| Sheet layout | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMergeoch OnPane levererar posterna TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergeoch TXLSDirectPane ; paneltillstånd använder TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Cursor state | TXLSRowCursor.State är en TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); strömöverlagringen av Open tar en TXLSStreamOwnership (xsoBorrowed som standard, xsoOwned för att överföra ägandet), och CurrentRowView returnerar en lånad IXLSRowCursorView -vy vars Valid -egenskap skyddar åtkomst och vars ValueByCol läser en cell av den lånade raden utan kopiering; vyn ogiltigförklaras när markören avancerar |
Skrivarens parameter- och stiltyper
Skrivarens typade hjälpare (lxDirectWrite) tar poster och uppräkningar så att anrop förblir allokationsfria: WriteRichString tar en TXLSDirectRichText; AddCellStyle bygger en stil på paketnivå från en TXLSDirectCellStyle vars justering (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), understrykning (TXLSDirectUnderline), fyllnadsmönster (TXLSDirectFillPattern) och ramsidor (TXLSDirectStyleBorder med TXLSDirectBorderSide) speglar OOXML-stilmodellen. Villkorsstyrd formatering skickar en TXLSDirectConditionalFormat med TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind och TXLSDirectIconSetType, datavalidering en TXLSDirectDataValidation, tabeller en TXLSDirectTable, hyperlänkar en TXLSDirectHyperlink, definierade namn en TXLSDirectDefinedName, differentialstilar en TXLSDirectDxfStyle, kommentarer en TXLSDirectComment, bilder en TXLSDirectImage med TXLSDirectImageFormat, diagram en TXLSDirectChart med TXLSDirectChartSeries och TXLSDirectChartType, sammanslagningar en TXLSDirectMergeRange, skyddade områden en TXLSDirectProtectedRange, bladskydd en mängd TXLSDirectSheetProtectionOptions av TXLSDirectSheetProtectionOption, autofilter-sorteringsstatus en TXLSDirectSortState, kolumnalternativ en TXLSDirectColumnOptionoch sidgeometri en post TXLSDirectPageMargins record
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 hämtar rader från applikationen: leverantören skriver radens celler rakt genom skrivaren och lämnar Eof = False, eller förklarar uttömdhet med Eof = True för att stoppa loopen. Hjälpfunktionerna konverterar mellan koordinater och skyddsprimitiver: XLSDirectColName renderar en nollbaserad kolumn som dess A1-bokstäver, XLSDirectParseRef tolkar en A1-cellreferens, och XLSDirectPasswordHash beräknar den äldre lösenordshash som bladskyddsposterna lagrar