Izravni API čitača i zapisivača
TXLSDirectReader i TXLSDirectWriter obrađuju XLSX pakete bez zadržavanja cijele mreže radnog lista u memoriji, pa se pozivi API-ja koji opisuju list moraju izvršiti prije ili tijekom odgovarajuće faze strujanja
Životni ciklus zapisivača i vrijednosti ćelija
TXLSDirectWriter.BeginFile ili BeginStream pokreću paket, metode za list definiraju po jedan radni list, a Finish potvrđuje konačni paket
| Scalar cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime, and WriteError |
| Skalarne ćelije | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime i WriteError |
| Formula ćelije | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime i WriteFormulaError prihvaćaju međuspremljene rezultate koje je dostavio pozivatelj |
| Zajednički nizovi | UseSharedStrings omogućuje deduplikaciju nizova na razini paketa |
| Panes | FreezePanes(ColSplit, RowSplit) zapisuje zamrznuti raspol at danoj koloni i reduku s bazom jedan |
Retci i stupci počinju od jedan u javnoj površini zapisivača i moraju se dostavljati naprijed redoslijedom radnog lista
Ponovno upotrebljivi stilovi
AddCellStyle registrira nepromjenjivu ručicu stila na razini paketa, a CloneCellStyle izvodi novu ručicu bez zadržavanja redaka radnog lista
Definirana imena i hiperveze
AddDefinedName, AddLocalDefinedName, AddDefinedRange i AddLocalDefinedRange dodaju imena na razini radne knjige ili lista prije finalizacije paketa
AddHyperlink, AddHyperlinkRange, AddInternalHyperlink i AddInternalHyperlinkRange emitiraju vanjske odnose ili unutarnje lokacije lista za jednu ćeliju ili raspon
Provjera podataka
AddDataValidation i AddDataValidationSqRef izlažu cijelu površinu pravila, dok AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation i AddCustomValidation pružaju pomoćne funkcije s tipovima
Uvjetno oblikovanje
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors i AddConditionalFormatNotContainsErrors dodaju skalarna pravila
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 i AddConditionalFormatIconSet dodaju vizualna pravila; ClearConditionalFormats uklanja čekajuća pravila za trenutni list
AutoFilter i tablice
AddAutoFilterValue, AddAutoFilterDateGroup i AddAutoFilterSortCondition konfiguriraju filtar radnog lista
AddTable stvara dio tablice, a AddTableFilterValue, AddTableFilterDateGroup i AddTableSortCondition konfiguriraju njegovo stanje filtra i sortiranja
Zaštita i prijelomi stranica
ProtectSheet, UnprotectSheet, AddProtectedRange i ClearProtectedRanges konfiguriraju zaštitu radnog lista; ProtectWorkbook i UnprotectWorkbook konfiguriraju strukturu radne knjige i zaključavanje prozora
AddHorizontalPageBreak i AddVerticalPageBreak emitiraju ručne prijelome stranica za trenutni radni list
Dijagnostika pohrane izravnog čitača
TXLSDirectReader.SharedStringMemoryLimit ograničava dekodiranu memoriju zajedničkih nizova, SharedStringsOnDisk izvještava o prelasku na privremenu indeksiranu pohranu, SharedStringCount izvještava o broju učitanih unosa, a ParallelDiag izlaže ograničenu dijagnostiku paralelnog raščlanjivanja
Pokazivač redaka
TXLSRowCursor.SelectSheet i SelectSheetByName biraju radni list; SheetCount, SheetNames, SheetIndex, RowIndex i Eof izlažu stanje prolaska, dok SharedStringMemoryLimit primjenjuje istu ograničenu politiku zajedničkih nizova kao izravni čitač
IncludeFormulaText po defaultu je true; njegovo isključivanje čuva predmemorirane vrijednosti, koordinate, stilove i HasFormula, dok FormulaTextAvailable postaje false i Formula ostaje prazna
Pokazivač redaka
TXLSRowCursor.Open prihvaća datoteke ili tokove XLS, XLSX, XLSM, ODS, CSV i TSV; automatska detekcija ZIP-a razlikuje ODS pakete od radnih knjiga Open XML prije otvaranja lista
SelectSheet i SelectSheetByName biraju radni list; SheetCount, SheetNames, SheetIndex, RowIndex i Eof izlažu stanje prolaska, dok SharedStringMemoryLimit primjenjuje istu ograničenu politiku zajedničkih nizova kao izravni čitač
FirstRow, LastRow, IncludeColumn i ClearColumnProjection koriste iste filtre s bazom jedan u svim formatima pokazivača; opcije prolaza ne mogu se mijenjati između FindFirst i EOF, ali postaju promjenjive ponovno nakon EOF, odabira lista ili zatvaranja
Svaki TXLSRowCursorCell izvještava HasFormula neovisno o FormulaTextAvailable; klasični XLS izlaže prisutnost formule i predmemorirane rezultate bez tvrdnji o nedostupnom tekstu tokena, dok IncludeFormulaText može suzbiti tekst formula XLSX-a i ODS-a prije akumulacije
ODS prolaz drži jedan fizički predložak retka, odrezuje ponovljene blokove redaka na traženi interval, skače izravno između odabranih stupaca unutar ponovljenih raspona, napreduje preko pokrivenih ćelija bez vraćanja ih kao vrijednosti i izvještava nevažeće ili mrežom ograničene brojeve ponavljanja kroz OnSkippedRecord
State razlikuje xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled i xrcsFaulted; Cancel je idempotentan, poništava trenutni redak i otpušta tok aktivnog radnog lista uz zadržavanje izvora, tako da izričit odabir lista može pokrenuti novi prolaz
Preopterećenje toka po defaultu je xsoBorrowed, vraća početnu poziciju pozivatelja pri zatvaranju i prihvaća xsoOwned za prijenos vlasništva nakon uspješnog otvaranja; neuspjela otvaranja nikada ne troše vlasništvo pozivatelja
CurrentRowView posuđuje polje trenutnog retka bez kopiranja i provjerava generaciju pri svakom pristupu; napredovanje, odabir, otkazivanje, zatvaranje ili uništavanje pokazivača poništava prikaz i podiže EXLSRowCursorViewInvalidated pri kasnijem pristupu
PeakRowBufferedBytes je monoton procijenjeni podatak od posljednjeg Open-a o zapisima ćelija, upravljanim sadržajima, bogatom tekstu i podacima pozadine formata zadržanima za jedan logički redak; namijenjen je dijagnostici regresije ograničene memorije, a ne točnom računovodstvu hrpe
SheetPassesStarted broji uspješna pokretanja pozadine radnog lista; pregledavanje naziva listova ili preskakanje lista kroz fasadu povratnih poziva ne otvara dio radnog lista
Forward prilagodnik povratnih poziva
TXLSForwardReader delegira dekodiranje XLS, XLSX, ODS, CSV i TSV na TXLSRowCursor, pretvara svaku ćeliju trenutnog retka u povratni poziv OnCell i čuva iste ugovore o granicama redaka, projekciji stupaca, stanju formula, bogatom tekstu, lozinci, preskočenim zapisima, poziciji toka i ograničenom međuspremniku
PeakRowBufferedBytes i SheetPassesStarted izlažu zajedničku dijagnostiku pokazivača na površini povratnih poziva, dok klasični XLS dodatno čuva ClassicBytesRead i ClassicPeakBufferedBytes
Događaji čitača i vrste zapisa
Čitač i pokazivač redaka izlažu neobavezne povratne pozive i obične zapise, sve deklarirano u lxDirectRead. Svaki povratni poziv slijedi isti oblik: zapis opisuje jednu strujanu stavku, a postavljanje Abort zaustavlja skeniranje (događaji listova dodatno prihvaćaju SkipSheet)
| Cells | OnCell (tip TXLSDirectCellEvent) dostavlja TXLSDirectCell po ćeliji čiji Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) bira popunjeno polje vrijednosti; bogati tekst putuje kao TXLSDirectRichText s unosima TXLSDirectRichTextRun, svaki s TXLSDirectRichColor (vrsta TXLSDirectRichColorKind), TXLSDirectRichUnderline i TXLSDirectRichVertAlign, plus neobaveznim podacima TXLSDirectPhoneticProperties i TXLSDirectPhoneticRun |
| Sheet framing | OnSheet (TXLSDirectSheetEvent) može preskočiti cijeli radni list prije parsiranja njegovih ćelija; OnSkippedRecord (TXLSDirectSkippedEvent) izvještava o neispravnom ili odrezanom sadržaju s id-em zapisa i razlogom |
| Sheet layout | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge i OnPane dostavljaju zapise TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge i TXLSDirectPane; stanje okna koristi TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Cursor state | TXLSRowCursor.State je TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); preopterećenje toka Open-a prima TXLSStreamOwnership (default xsoBorrowed, xsoOwned za prijenos vlasništva), a CurrentRowView vraća posuđeni prikaz IXLSRowCursorView čije svojstvo Valid čuva pristup i čije ValueByCol čita jednu ćeliju posuđenog retka bez kopiranja; prikaz se poništava kada se pokazivač pomakne |
Tipovi parametara i stilova zapisivača
Tipizirani pomoćnici zapisivača (lxDirectWrite) prihvaćaju zapise i nabrajanja kako pozivi ostali bez alokacija: WriteRichString prima TXLSDirectRichText; AddCellStyle gradi stil na razini paketa iz TXLSDirectCellStyle čije poravnanje (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), podvlaka (TXLSDirectUnderline), uzorak ispune (TXLSDirectFillPattern) i stranice okvira (TXLSDirectStyleBorder s TXLSDirectBorderSide) preslikavaju model stilova OOXML-a. Uvjetni formati prosljeđuju TXLSDirectConditionalFormat s TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind i TXLSDirectIconSetType, provjera podataka TXLSDirectDataValidation, tablice TXLSDirectTable, hiperveze TXLSDirectHyperlink, definirana imena TXLSDirectDefinedName, diferencijalni stilovi TXLSDirectDxfStyle, komentari TXLSDirectComment, slike TXLSDirectImage s TXLSDirectImageFormat, grafikoni TXLSDirectChart s TXLSDirectChartSeries i TXLSDirectChartType, spajanja TXLSDirectMergeRange, zaštićeni rasponi TXLSDirectProtectedRange, zaštita lista skup TXLSDirectSheetProtectionOptions od TXLSDirectSheetProtectionOption, stanje sortiranja auto-filtra TXLSDirectSortState, opcije stupca TXLSDirectColumnOption, a geometrija stranice zapis 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 povlači retke iz aplikacije: dobavljač zapisuje ćelije retka izravno kroz zapisivač i ostavlja Eof = False, ili deklariše iscrpljenost s Eof = True za zaustavljanje petlje. Pomoćnici pretvaraju koordinate i primitiva zaštite: XLSDirectColName prikazuje stupac s bazom nula kao njegova A1 slova, XLSDirectParseRef parsira A1 referencu ćelije, a XLSDirectPasswordHash računa zastarjeli hash lozinke koji pohranjuju zapisi zaštite lista