API za direktno čitanje i upis
TXLSDirectReader i TXLSDirectWriter obrađuju XLSX pakete bez zadržavanja kompletne mreže radnog lista u memoriji, pa se pozivi API-ja koji opisuju radni list moraju obaviti pre ili tokom odgovarajuće faze strimovanja
Životni ciklus upisivača i vrednosti ćelija
TXLSDirectWriter.BeginFile ili BeginStream pokreću paket, metode radnog lista definišu po jedan radni list, a Finish potvrđuje konačni paket
| Scalar cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimei WriteError |
| Formula cells | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimei WriteFormulaError prihvataju keširane rezultate koje isporučuje pozivalac |
| Shared strings | UseSharedStrings omogućava deduplikaciju niski na nivou paketa |
| Statistics | CellCount izveštava o broju emitovanih ćelija |
| Panes | FreezePanes(ColSplit, RowSplit) upisuje zamrznuti prelom na datu kolonu i red (1-bazna) |
Redovi i kolone su zasnovani na jedinici (one-based) u javnoj površini upisivača i moraju se isporučiti u redosledu radnog lista unapred
Višekratno upotrebljivi stilovi
AddCellStyle registruje nepromenljivu ručku stila na nivou paketa, a CloneCellStyle izvodi novu ručku bez zadržavanja redova radnog lista
Definisana imena i hiperveze
AddDefinedName, AddLocalDefinedName, AddDefinedRangei AddLocalDefinedRange dodaju imena radne sveske ili lokalna imena radnog lista pre finalizacije paketa
AddHyperlink, AddHyperlinkRange, AddInternalHyperlinki AddInternalHyperlinkRange emituju spoljne relacije ili unutrašnje lokacije radnog lista za jednu ćeliju ili opseg
Validacija podataka
AddDataValidation i AddDataValidationSqRef izlažu kompletnu površinu pravila, dok AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationi AddCustomValidation pružaju tipizirane pomoćnike
Uslovno formatiranje
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorsi AddConditionalFormatNotContainsErrors dodaju skalarne stilove pravila
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3i AddConditionalFormatIconSet dodaju vizuelna pravila; ClearConditionalFormats uklanja nepotvrđena pravila za trenutni radni list
Automatski filter i tabele
AddAutoFilterValue, AddAutoFilterDateGroupi AddAutoFilterSortCondition konfigurišu filter radnog lista
AddTable kreira deo tabele, a AddTableFilterValue, AddTableFilterDateGroupi AddTableSortCondition konfigurišu njegovo stanje filtera i sortiranja
Zaštita i prelomi stranica
ProtectSheet, UnprotectSheet, AddProtectedRangei ClearProtectedRanges konfigurišu zaštitu radnog lista; ProtectWorkbook i UnprotectWorkbook konfigurišu strukturu radne sveske i zaključavanja prozora
AddHorizontalPageBreak i AddVerticalPageBreak emituju ručne prelome stranica za trenutni radni list
Dijagnostika skladišta direktnog čitača
TXLSDirectReader.SharedStringMemoryLimit ograničava memoriju dekodiranih deljenih niski, SharedStringsOnDisk izveštava o migraciji u privremeno indeksirano skladište, SharedStringCount izveštava o broju učitanih stavki, a ParallelDiag izlaže ograničenu dijagnostiku paralelnog raščlanjivanja
Projekcija čitača i stanje formula
FirstRow, LastRow, IncludeColumni ClearColumnProjection guraju izbor redova i kolona (1-baznih) u parser radnog lista pre dodele vrednosti, formule ili rich text sadržaja
IncludeFormulaText je podrazumevano uključen; njegovo isključivanje zadržava keširane vrednosti, koordinate, stilove i HasFormula , dok FormulaTextAvailable postaje false i Formula ostaje prazna
Kursor redova
TXLSRowCursor.Open prihvata XLS, XLSX, XLSM, ODS, CSV i TSV datoteke ili tokove; automatska ZIP detekcija razlikuje ODS pakete od Open XML radnih sveski pre otvaranja lista
SelectSheet i SelectSheetByName biraju radni list; SheetCount, SheetNames, SheetIndex, RowIndexi Eof izlažu stanje prolaska, dok SharedStringMemoryLimit primenjuje isto ograničeno pravilo deljenih niski kao direktni čitač
FirstRow, LastRow, IncludeColumni ClearColumnProjection koriste iste 1-bazne filtere u svim formatima kursora; opcije prolaska ne mogu da se menjaju između FindFirst i EOF, ali ponovo postaju promenljive nakon EOF, izbora lista ili zatvaranja
Svaka TXLSRowCursorCell prijavljuje HasFormula nezavisno od FormulaTextAvailable; klasični XLS izlaže prisustvo formule i keširane rezultate bez tvrdnji o nedostupnom tekstu tokena, dok IncludeFormulaText može da potisne tekst formula u XLSX i ODS formatima pre akumulacije
Prolazak kroz ODS drži jedan fizički šablon reda, skraćuje ponovljene blokove redova na traženi interval, skače neposredno između izabranih kolona unutar ponovljenih raspona, prelazi preko pokrivenih ćelija bez njihovog vraćanja kao vrednosti i kroz OnSkippedRecord
State razlikuje xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledi xrcsFaulted; Cancel je idempotentan, poništava tekući red i oslobađa tok aktivnog radnog lista, uz zadržavanje izvora kako eksplicitna selekcija lista može da započne novi prolaz
Overload sa tokom podrazumeva xsoBorrowed, vraća početni položaj pozivaoca pri zatvaranju i prihvata xsoOwned za prenos vlasništva nakon uspešnog otvaranja; neuspela otvaranja nikada ne troše vlasništvo pozivaoca
CurrentRowView pozajmljuje niz tekućeg reda bez kopiranja i proverava generaciju pre svakog pristupa; napredovanje, selekcija, otkazivanje, zatvaranje ili uništavanje kursora poništava pogled i pri kasnijem pristupu podiže EXLSRowCursorViewInvalidated on later access
PeakRowBufferedBytes je monotona procena od poslednjeg Open -a za zapise ćelija, upravljane nosioce podataka, rich text i podatke format pozadine zadržane za jedan logički red; namenjena je dijagnostici regresije ograničene memorije, a ne tačnom računovodstvu gomile
SheetPassesStarted broji uspešna pokretanja pozadine radnog lista; pregledanje imena listova ili preskakanje lista kroz callback fasadu ne otvara deo radnog lista
Adapter forward Callback-ova
TXLSForwardReader delegira dekodovanje XLS, XLSX, ODS, CSV i TSV formata na TXLSRowCursor, pretvara svaku ćeliju tekućeg reda u Callback OnCell i čuva iste ugovore o granicama redova, projekciji kolona, stanju formula, rich tekstu, lozinkama, preskočenim zapisima, položaju toka i ograničenim baferima
PeakRowBufferedBytes i SheetPassesStarted izlažu zajedničku dijagnostiku kursora na callback površini, dok klasični XLS dodatno zadržava ClassicBytesRead i ClassicPeakBufferedBytes
Događaji čitača i tipovi zapisa
Čitač i kursor redova izlažu opcione Callback-ove i obične zapise, svi deklarisani u lxDirectRead. Svaki Callback prati isti oblik: zapis opisuje jedan strimovan objekat, a postavljanje Abort zaustavlja skeniranje (sheet događaji dodatno prihvataju SkipSheet)
| Cells | OnCell (tip TXLSDirectCellEvent) isporučuje TXLSDirectCell po ćeliji čiji Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) bira popunjeno polje vrednosti; rich text putuje kao TXLSDirectRichText koji drži unose TXLSDirectRichTextRun , svaki sa TXLSDirectRichColor (vrsta TXLSDirectRichColorKind), TXLSDirectRichUnderlinei TXLSDirectRichVertAlign, plus opcionim podacima TXLSDirectPhoneticProperties i TXLSDirectPhoneticRun data |
| Sheet framing | OnSheet (TXLSDirectSheetEvent) može da preskoči ceo radni list pre parsiranja njegovih ćelija; OnSkippedRecord (TXLSDirectSkippedEvent) prijavljuje loše formiran ili odsečen sadržaj sa id-jem zapisa i razlogom |
| Sheet layout | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMergei OnPane isporučuju zapise TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergei TXLSDirectPane ; stanje okna koristi TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Cursor state | TXLSRowCursor.State je TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); overload Open -a sa tokom prima TXLSStreamOwnership (podrazumevanoxsoBorrowed , xsoOwned za prenos vlasništva), a CurrentRowView vraća pozajmljeni pregled IXLSRowCursorView čije svojstvo Valid štiti pristup i čiji ValueByCol čita jednu ćeliju pozajmljenog reda bez kopiranja; pregled se poništava kada kursor napreduje |
Tipovi parametara i stilova upisivača
Tipizirani pomoćnici upisivača (lxDirectWrite) prihvataju zapise i enumeracije tako da pozivi ostaju bez alokacija: WriteRichString prima TXLSDirectRichText; AddCellStyle gradi stil na nivou paketa iz TXLSDirectCellStyle čije poravnanje (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), podvlaka (TXLSDirectUnderline), šara popune (TXLSDirectFillPattern) i stranice ivica (TXLSDirectStyleBorder sa TXLSDirectBorderSide) prate OOXML model stilova. Uslovni formati prosleđuju TXLSDirectConditionalFormat sa TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind i TXLSDirectIconSetType, provera podataka TXLSDirectDataValidation, tabele TXLSDirectTable, hiperlinkovi TXLSDirectHyperlink, definisana imena TXLSDirectDefinedName, diferencijalni stilovi TXLSDirectDxfStyle, komentari TXLSDirectComment, slike TXLSDirectImage sa TXLSDirectImageFormat, grafikoni TXLSDirectChart sa TXLSDirectChartSeries i TXLSDirectChartType, spajanja TXLSDirectMergeRange, zaštićeni opseci TXLSDirectProtectedRange, zaštita lista skup TXLSDirectSheetProtectionOptions od TXLSDirectSheetProtectionOption, stanje sortiranja automatskog filtera TXLSDirectSortState, opcije kolone TXLSDirectColumnOption, a geometrija stranice zapis 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 povlači redove iz aplikacije: dobavljač upisuje ćelije reda neposredno kroz upisivač i ostavlja Eof = False, ili prijavljuje iscrpljenost sa Eof = True da zaustavi petlju. Pomoćnici pretvaraju koordinate i primitive zaštite: XLSDirectColName prikazuje 0-baznu kolonu kao njena A1 slova, XLSDirectParseRef parsira A1 referencu ćelije, a XLSDirectPasswordHash računa zastareli heš lozinke koji čuvaju zapisi zaštite lista