HotXLS-dokumentation

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 cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimeoch WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimeoch WriteFormulaError accepterar anropslevererade cachelagrade resultat
Shared stringsUseSharedStrings aktiverar paketnivåsträngdeduplicering
StatisticsCellCount rapporterar antalet utsända celler
PanesFreezePanes(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)

CellsOnCell (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 framingOnSheet (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 layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMergeoch OnPane levererar posterna TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergeoch TXLSDirectPane ; paneltillstånd använder TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.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

Se även