Közvetlen olvasó és író API
TXLSDirectReader és TXLSDirectWriter XLSX-csomagokat dolgoz fel anélkül, hogy a teljes munkalaprácsot a memóriában tartaná, ezért a lapot leíró API-hívásokat a megfelelő streamelési fázis előtt vagy közben kell elvégezni
Író életciklusa és cellaértékek
TXLSDirectWriter.BeginFile vagy BeginStream elindít egy csomagot, a lapmetódusok egyszerre egy munkalapot definiálnak, a Finish pedig rögzíti a végső csomagot
| Skaláris cellák | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime és WriteError |
| Képletcellák | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime és WriteFormulaError a hívó által szolgáltatott gyorsítótárazott eredményeket fogadják el |
| Megosztott karakterláncok | UseSharedStrings lehetővé teszi a csomagszintű karakterlánc-deduplikálást |
| Statisztikák | CellCount a kiadott cellák számát jelenti |
| Ablaktáblák | A FreezePanes(ColSplit, RowSplit) rögzített osztást ír ki a megadott egyalapú oszlopnál és sornál |
A sorok és oszlopok az egytől kezdődő számozást használják a nyilvános író felületén, és előrehaladó munkalap-sorrendben kell őket megadni
Újrahasznosítható stílusok
AddCellStyle egy megváltoztathatatlan (immutable) csomagszintű stílusazonosítót regisztrál, a CloneCellStyle pedig új azonosítót származtat anélkül, hogy munkalapsorokat tartana meg
Definiált nevek és hiperhivatkozások
AddDefinedName, AddLocalDefinedName, AddDefinedRange és AddLocalDefinedRange munkafüzet- vagy lapszintű neveket adnak hozzá a csomag véglegesítése előtt
AddHyperlink, AddHyperlinkRange, AddInternalHyperlink és AddInternalHyperlinkRange külső kapcsolatokat vagy belső laphelyeket bocsátanak ki egy cellához vagy tartományhoz
Adatérvényesítés
AddDataValidation és AddDataValidationSqRef a teljes szabályfelületet teszik elérhetővé, míg az AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation és AddCustomValidation típusos segédfüggvényeket biztosítanak
Feltételes formázás
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors és AddConditionalFormatNotContainsErrors skaláris szabályokat adnak hozzá
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 és AddConditionalFormatIconSet vizuális szabályokat adnak hozzá; a ClearConditionalFormats eltávolítja az aktuális lap függőben lévő szabályait
AutoFilter és táblázatok
AddAutoFilterValue, AddAutoFilterDateGroup és AddAutoFilterSortCondition konfigurálják a munkalapszűrőt
AddTable táblarészt hoz létre, az AddTableFilterValue, AddTableFilterDateGroup és AddTableSortCondition pedig annak szűrő- és rendezési állapotát konfigurálják
Védelem és oldaltörések
ProtectSheet, UnprotectSheet, AddProtectedRange és ClearProtectedRanges a munkalapvédelmet konfigurálják; a ProtectWorkbook és UnprotectWorkbook a munkafüzet-struktúra és az ablakzárak védelmét konfigurálják
AddHorizontalPageBreak és AddVerticalPageBreak kézi oldaltöréseket bocsátanak ki az aktuális munkalaphoz
Közvetlen olvasó tárolási diagnosztikája
TXLSDirectReader.SharedStringMemoryLimit korlátozza a dekódolt megosztott karakterlánc-memóriát, a SharedStringsOnDisk az ideiglenes indexelt tárhelyre történő áttelepítést jelenti, a SharedStringCount a betöltött bejegyzések számát jelenti, a ParallelDiag pedig a korlátozott párhuzamos elemző diagnosztikát teszi elérhetővé
Olvasó vetülete és képletállapota
A FirstRow, a LastRow, az IncludeColumn és a ClearColumnProjection a sor- és az egyalapú oszlopkijelölést már a munkalap-elemzőbe tolja, még az érték-, képlet- vagy formázott szöveg allokálása előtt
Az IncludeFormulaText alapértelmezése true; ha letiltja, a gyorsítótárazott értékek, koordináták, stílusok és a HasFormula megmaradnak, a FormulaTextAvailable false lesz, a Formula pedig üres marad
Sorkurzor
A TXLSRowCursor.Open XLS, XLSX, XLSM, ODS, CSV és TSV fájlokat vagy adatfolyamokat fogad; a ZIP automatikus felismerés már munkalap megnyitása előtt megkülönbözteti az ODS csomagokat az Open XML munkafüzetektől
A SelectSheet és a SelectSheetByName munkalapot választ; a SheetCount, SheetNames, SheetIndex, RowIndex és Eof a bejárási állapotot teszik elérhetővé, míg a SharedStringMemoryLimit ugyanazt a korlátozott megosztott karakterlánc-szabályzatot alkalmazza, mint a közvetlen olvasó
A FirstRow, a LastRow, az IncludeColumn és a ClearColumnProjection ugyanazokat az egytől kezdődő szűrőket használja az összes kurzorformátumban; az átadott beállítások nem változhatnak a FindFirst és az EOF között, de EOF, munkalapválasztás vagy lezárás után újra módosíthatókká válnak
Minden TXLSRowCursorCell a HasFormula értéket függetlenül jelenti a FormulaTextAvailable-től; a klasszikus XLS a képlet jelenlétét és a gyorsítótárazott eredményeket a nem elérhető token szöveg igénylése nélkül közli, az IncludeFormulaText pedig a felhalmozás előtt elnyomhatja az XLSX és ODS képletszöveget
Az ODS bejárás egyetlen fizikai sortemplimot tart, az ismétlődő sorblokkokat a kért intervallumra vágja, az ismétlődő szakaszokon belül közvetlenül a kiválasztott oszlopok közé ugrik, a lefedett cellákon érték visszaadása nélkül halad át, az érvénytelen vagy rács által korlátozott ismétlésszámokat pedig az OnSkippedRecord révén jelenti
A State megkülönbözteti az xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled és xrcsFaulted állapotokat; a Cancel idempotens, érvényteleníti az aktuális sort, és felszabadítja az aktív munkalap-adatfolyamot a forrás megtartása mellett, így egy explicit munkalapválasztás új átmenetet indíthat
Az adatfolyam-túlterhelés alapértelmezése xsoBorrowed, lezáráskor visszaállítja a hívó kezdeti pozícióját, és sikeres megnyitás után elfogadja az xsoOwned értéket a tulajdonjog átruházására; a sikertelen megnyitás soha nem fogyasztja el a hívó tulajdonjogát
A CurrentRowView másolás nélkül kölcsönzi az aktuális sortömböt, és minden hozzáférés előtt generációellenőrzést végez; a kurzor előreléptetése, kiválasztása, megszakítása, lezárása vagy megsemmisítése érvényteleníti a nézetet, és a későbbi hozzáférésnél EXLSRowCursorViewInvalidated kivételt vált ki
A PeakRowBufferedBytes a legutóbbi Open óta monotón növekvő becslés az egy logikai sorhoz megtartott cellarekordokról, kezelt hasznos terhekről, formázott szövegről és formátum-háttérrendszeri adatokról; korlátos memóriájú visszacsatolási diagnosztikára szolgál, nem pontos heap-mérlegelésre
A SheetPassesStarted a sikeres munkalap-háttérrendszer-indításokat számolja; a munkalapnevek megvizsgálása vagy egy munkalap kihagyása a visszahívási felületen keresztül nem nyitja meg a munkalaprészt
Továbbító visszahívás-adapter
A TXLSForwardReader az XLS, XLSX, ODS, CSV és TSV dekódolást a TXLSRowCursor-ra bízza, az aktuális sor minden celláját OnCell visszahívássá alakítja, és megőrzi ugyanazokat a sorhatár-, oszlopvetület-, képletállapot-, formázott szöveg-, jelszó-, kihagyott rekord-, streampozíció- és korlátos puffer szerződéseket
A PeakRowBufferedBytes és a SheetPassesStarted a közös kurzordiagnosztikát teszi elérhetővé a visszahívási felületen, a klasszikus XLS emellett megőrzi a ClassicBytesRead és a ClassicPeakBufferedBytes értékeket
Az olvasó eseményei és rekordtípusai
Az olvasó és a sorkurzor opcionális visszahívásokat és egyszerű rekordokat tesz elérhetővé, valamennyit a lxDirectRead deklarálja. Minden visszahívás azonos formát követ: a rekord egyetlen streamelt elemet ír le, az Abort beállítása pedig leállítja a beolvasást (a munkalap-események emellett elfogadják a SkipSheet értéket)
| Cellák | Az OnCell (típusa TXLSDirectCellEvent) cellánként egy TXLSDirectCell rekordot ad át, amelynek Kind mezője (típusa TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) választja ki a kitöltött értékmezőt; a formázott szöveg TXLSDirectRichText-ként közlekedik, amely TXLSDirectRichTextRun bejegyzéseket tartalmaz, mindegyik TXLSDirectRichColor színnel (típusa TXLSDirectRichColorKind), TXLSDirectRichUnderline aláhúzással és TXLSDirectRichVertAlign függőleges igazítással, valamint opcionális TXLSDirectPhoneticProperties és TXLSDirectPhoneticRun adatokkal |
| Munkalap keretezése | Az OnSheet (TXLSDirectSheetEvent) a cellák elemzése előtt kihagyhat egy teljes munkalapot; az OnSkippedRecord (TXLSDirectSkippedEvent) hibás vagy csonka tartalmat jelent a rekordazonosítóval és az okkal együtt |
| Munkalap elrendezése | Az OnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge és OnPane TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge és TXLSDirectPane rekordokat továbbít; az ablaktábla állapota a TXLSDirectPaneState típust használja (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Kurzor állapota | A TXLSRowCursor.State egy TXLSRowCursorState típusú érték (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); az Open stream-túlterhelése egy TXLSStreamOwnership értéket vesz át (alapértelmezése xsoBorrowed, a tulajdonlás átruházásához xsoOwned), a CurrentRowView pedig egy kölcsönzött IXLSRowCursorView nézetet ad vissza, amelynek Valid tulajdonsága védi a hozzáférést, a ValueByCol pedig másolás nélkül olvas egy cellát a kölcsönzött sorból; a nézet érvénytelenné válik, amikor a kurzor továbblép |
Az író paraméter- és stílustípusai
Az író típusos segédei (lxDirectWrite) rekordokat és felsorolásokat fogadnak, így a hívások allokációmentesek maradnak: a WriteRichString egy TXLSDirectRichText rekordot kap; az AddCellStyle csomagszintű stílust épít egy TXLSDirectCellStyle rekordból, amelynek igazítása (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), aláhúzása (TXLSDirectUnderline), kitöltési mintája (TXLSDirectFillPattern) és keretoldalai (TXLSDirectStyleBorder, mellette TXLSDirectBorderSide) tükrözik az OOXML stílusmodelljét. A feltételes formátumok egy TXLSDirectConditionalFormat rekordot adnak át TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind és TXLSDirectIconSetType típusokkal, az adatérvényesítés egy TXLSDirectDataValidation rekordot, a táblázatok egy TXLSDirectTable rekordot, a hiperhivatkozások egy TXLSDirectHyperlink rekordot, a definiált nevek egy TXLSDirectDefinedName rekordot, a differenciális stílusok egy TXLSDirectDxfStyle rekordot, a megjegyzések egy TXLSDirectComment rekordot, a képek egy TXLSDirectImage rekordot TXLSDirectImageFormat formátummal, a diagramok egy TXLSDirectChart rekordot TXLSDirectChartSeries sorozatokkal és TXLSDirectChartType típussal, az egyesítések egy TXLSDirectMergeRange rekordot, a védett tartományok egy TXLSDirectProtectedRange rekordot, a munkalapvédelem egy TXLSDirectSheetProtectionOptions halmazt, amely a TXLSDirectSheetProtectionOption elemekből áll, az automatikus szűrő rendezési állapota egy TXLSDirectSortState rekordot, az oszlopopciók egy TXLSDirectColumnOption rekordot, az oldalgeometria pedig egy TXLSDirectPageMargins rekordot
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;
Az OnNeedRow az alkalmazástól kéri le a sorokat: a szolgáltató a sor celláit közvetlenül az írón keresztül írja ki, és Eof = False értéken hagyja a jelzőt, vagy Eof = True beállítással jelzi a kimerülést, és leállítja a ciklust. A segédek a koordináták és a védelmi primitívek között konvertálnak: az XLSDirectColName a nullaalapú oszlopot A1 betűivel jeleníti meg, az XLSDirectParseRef egy A1 cellahivatkozást elemez, az XLSDirectPasswordHash pedig a munkalapvédelmi rekordokban tárolt örökölt jelszóhash-t számítja ki