Dokumentace HotXLS

API přímého čtenáře a zapisovatele

TXLSDirectReader a TXLSDirectWriter zpracovávají balíčky XLSX bez držení kompletní mřížky listu v paměti, takže volání API, která popisují list, musí být provedena před odpovídající fází streamování nebo během ní

Životní cyklus zapisovatele a hodnoty buněk

TXLSDirectWriter.BeginFile nebo BeginStream spustí balíček, metody listu definují vždy jeden list a Finish potvrdí konečný balíček

Skalární buňkyWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime a WriteError
Buňky se vzorciWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime a WriteFormulaError přijímají výsledky v mezipaměti dodané volajícím
Sdílené řetězceUseSharedStrings povoluje deduplikaci řetězců na úrovni balíčku
StatistikaCellCount hlásí počet vygenerovaných buněk
PanelyFreezePanes(ColSplit, RowSplit) zapíše zmrazený rozdělující panel v zadaném sloupci a řádku číslovaných od 1

Řádky a sloupce jsou ve veřejném rozhraní zapisovatele číslovány od 1 a musí být dodávány v dopředném pořadí listu

Znovupoužitelné styly

AddCellStyle registruje neměnný popisovač stylu na úrovni balíčku a CloneCellStyle odvozuje nový popisovač bez uchovávání řádků listu

Definované názvy a hypertextové odkazy

AddDefinedName, AddLocalDefinedName, AddDefinedRange a AddLocalDefinedRange přidávají názvy na úrovni sešitu nebo listu před finalizací balíčku

AddHyperlink, AddHyperlinkRange, AddInternalHyperlink a AddInternalHyperlinkRange generují externí relace nebo interní umístění listu pro jednu buňku nebo rozsah

Ověřování dat

AddDataValidation a AddDataValidationSqRef zpřístupňují kompletní povrch pravidel, zatímco AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation a AddCustomValidation poskytují typované pomocníky

Podmíněné formátování

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors a AddConditionalFormatNotContainsErrors přidávají skalární pravidla

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 a AddConditionalFormatIconSet přidávají vizuální pravidla; ClearConditionalFormats odebírá čekající pravidla pro aktuální list

Automatický filtr a tabulky

AddAutoFilterValue, AddAutoFilterDateGroup a AddAutoFilterSortCondition konfigurují filtr listu

AddTable vytvoří část tabulky a AddTableFilterValue, AddTableFilterDateGroup a AddTableSortCondition konfigurují její stav filtru a řazení

Ochrana a konce stránek

ProtectSheet, UnprotectSheet, AddProtectedRange a ClearProtectedRanges konfigurují ochranu listu; ProtectWorkbook a UnprotectWorkbook konfigurují zámky struktury a oken sešitu

AddHorizontalPageBreak a AddVerticalPageBreak generují ruční konce stránek pro aktuální list

Diagnostika úložiště přímého čtenáře

TXLSDirectReader.SharedStringMemoryLimit omezuje paměť dekódovaných sdílených řetězců, SharedStringsOnDisk hlásí migraci do dočasného indexovaného úložiště, SharedStringCount hlásí počet načtených položek a ParallelDiag zpřístupňuje ohraničenou diagnostiku paralelního analyzátoru

Projekce čtení a stav vzorců

FirstRow, LastRow, IncludeColumn a ClearColumnProjection zatlačí výběr řádků a sloupců číslovaných od 1 do analyzátoru listu dřív, než se alokují hodnoty, vzorce nebo rich text

IncludeFormulaText má výchozí hodnotu true; jeho vypnutí zachová hodnoty z mezipaměti, souřadnice, styly a HasFormula, zatímco FormulaTextAvailable přejde na false a Formula zůstane prázdná

Kurzor řádků

TXLSRowCursor.Open přijímá soubory nebo streamy XLS, XLSX, XLSM, ODS, CSV a TSV; automatická detekce ZIP rozliší balíček ODS od sešitu Open XML dřív, než se otevře list

TXLSRowCursor.SelectSheet a SelectSheetByName vybírají list; SheetCount, SheetNames, SheetIndex, RowIndex a Eof zpřístupňují stav procházení, zatímco SharedStringMemoryLimit uplatňuje stejnou ohraničenou politiku sdílených řetězců jako přímý čteč

FirstRow, LastRow, IncludeColumn a ClearColumnProjection používají stejné filtry od 1 napříč všemi formáty kurzoru; volby průchodu se nemohou měnit mezi FindFirst a EOF, ale po EOF, výběru listu nebo zavření se opět uvolní pro změnu

Každá TXLSRowCursorCell hlásí HasFormula nezávisle na FormulaTextAvailable; klasický XLS zpřístupní přítomnost vzorce a výsledky z mezipaměti bez nároku na nedostupný text tokenů, zatímco IncludeFormulaText může potlačit text vzorců XLSX a ODS dřív, než se akumuluje

Průchod ODS drží jednu fyzickou šablonu řádku, ořízne opakované bloky řádků na požadovaný interval, skáče přímo mezi vybranými sloupci uvnitř opakovaných rozsahů, posouvá se přes kryté buňky bez jejich vracení jako hodnot a neplatné nebo mřížkou omezené počty opakování hlásí přes OnSkippedRecord

State rozlišuje xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled a xrcsFaulted; Cancel je idempotentní, zneplatní aktuální řádek a uvolní stream aktivního listu, přičemž zdroj si ponechá, takže explicitní výběr listu může zahájit nový průchod

Overload se streamem má výchozí xsoBorrowed a při zavření obnoví počáteční pozici volajícího; s xsoOwned přenese vlastnictví po úspěšném otevření, neúspěšné otevření nikdy vlastnictví volajícího nespotřebuje

CurrentRowView si aktuální pole řádku půjčí bez kopírování a před každým přístupem kontroluje generaci; posun, výběr listu, zrušení, zavření nebo destrukce kurzoru pohled zneplatní a při dalším přístupu vyvolá EXLSRowCursorViewInvalidated

PeakRowBufferedBytes je monotónní odhad od posledního Open, kolik záznamů buněk, spravovaných obsahů, rich textu a dat formátovacího backendu se drží pro jeden logický řádek; hodí se pro regresní diagnostiku ohraničené paměti, ne pro přesné účtování haldy

SheetPassesStarted počítá úspěšné starty backendu listu; pohled na názvy listů nebo přeskočení listu přes fasádu zpětných volání part listu neotevře

Adaptér dopředných zpětných volání

TXLSForwardReader deleguje dekódování XLS, XLSX, ODS, CSV a TSV na TXLSRowCursor, převádí každou buňku aktuálního řádku na zpětné volání OnCell a zachovává stejné smlouvy o mezích řádků, projekci sloupců, stavu vzorců, rich textu, heslech, přeskočených záznamech, pozici streamu i ohraničených bufferech

PeakRowBufferedBytes a SheetPassesStarted zpřístupňují sdílenou diagnostiku kurzoru na povrchu zpětných volání, zatímco klasický XLS si navíc drží ClassicBytesRead a ClassicPeakBufferedBytes

Události čtečky a typy záznamů

Čteč i kurzor řádků zpřístupňují volitelná zpětná volání a jednoduché záznamy, všechny deklarované v lxDirectRead. Každé zpětné volání má stejný tvar: záznam popisuje jednu streamovanou položku a nastavení Abort zastaví sken (události listu navíc přijímají SkipSheet)

BuňkyOnCell (typ TXLSDirectCellEvent) dodává TXLSDirectCell pro každou buňku, jejíž Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) vybírá vyplněné hodnotové pole; rich text putuje jako TXLSDirectRichText nesoucí položky TXLSDirectRichTextRun, každá s TXLSDirectRichColor (druh TXLSDirectRichColorKind), TXLSDirectRichUnderline a TXLSDirectRichVertAlign, plus volitelná data TXLSDirectPhoneticProperties a TXLSDirectPhoneticRun
Rámování listůOnSheet (TXLSDirectSheetEvent) může přeskočit celý list dřív, než se jeho buňky rozparsují; OnSkippedRecord (TXLSDirectSkippedEvent) hlásí poškozený nebo zkrácený obsah s id záznamu a důvodem
Rozvržení listůOnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge a OnPane dodávají záznamy TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge a TXLSDirectPane; stav panelů používá TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Stav kurzoruTXLSRowCursor.State je TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); streamový overload Open přijímá TXLSStreamOwnership (výchozí xsoBorrowed, xsoOwned přenese vlastnictví) a CurrentRowView vrací půjčený pohled IXLSRowCursorView, jehož vlastnost Valid střeží přístup a jehož ValueByCol přečte jednu buňku půjčeného řádku bez kopírování; pohled se zneplatní, když kurzor pokročí

Typy parametrů a stylů zapisovače

Typovaní pomocníci zapisovače (lxDirectWrite) přijímají záznamy a enumy, takže volání zůstávají bez alokací: WriteRichString bere TXLSDirectRichText; AddCellStyle sestaví styl na úrovni balíčku z TXLSDirectCellStyle, jehož zarovnání (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), podtržení (TXLSDirectUnderline), vzor výplně (TXLSDirectFillPattern) a strany okrajů (TXLSDirectStyleBorder s TXLSDirectBorderSide) zrcadlí styl model OOXML. Podmíněné formáty předávají TXLSDirectConditionalFormat s TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind a TXLSDirectIconSetType, ověřování dat TXLSDirectDataValidation, tabulky TXLSDirectTable, hypertextové odkazy TXLSDirectHyperlink, definované názvy TXLSDirectDefinedName, diferenciální styly TXLSDirectDxfStyle, komentáře TXLSDirectComment, obrázky TXLSDirectImage s TXLSDirectImageFormat, grafy TXLSDirectChart s TXLSDirectChartSeries a TXLSDirectChartType, sloučení TXLSDirectMergeRange, chráněné rozsahy TXLSDirectProtectedRange, ochranu listu množinu TXLSDirectSheetProtectionOptions z TXLSDirectSheetProtectionOption, stav řazení automatického filtru TXLSDirectSortState, volby sloupců TXLSDirectColumnOption a geometrii stránky záznam 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 tahá řádky z aplikace: dodavatel zapíše buňky řádku přímo skrze zapisovač a nechá Eof = False, nebo vyčerpání deklaruje pomocí Eof = True a smyčku zastaví. Pomocníci převádějí mezi souřadnicemi a primitivy ochrany: XLSDirectColName vykreslí sloupec od nuly jako jeho písmena A1, XLSDirectParseRef rozparsuje odkaz na buňku ve stylu A1 a XLSDirectPasswordHash spočítá starší hash hesla, který ukládají záznamy ochrany listu

Viz také