Документация на HotXLS

Директно API за четене и запис

TXLSDirectReader и TXLSDirectWriter обработват XLSX пакети, без да държат пълна мрежа на работния лист в паметта, така че API извикванията, които описват лист, трябва да бъдат направени преди или по време на съответната фаза на поточно предаване

Жизнен цикъл на писателя и стойности на клетки

TXLSDirectWriter.BeginFile или BeginStream стартира пакет, методите за листове дефинират по един работен лист наведнъж, а Finish финализира крайния пакет

Скаларни клеткиWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime и WriteError
Формулни клеткиWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime и WriteFormulaError приемат предоставени от извикващия код кеширани резултати
Споделени низовеUseSharedStrings включва дедупликация на низове на ниво пакет
СтатистикаCellCount отчита броя на изведените клетки
ПанелиFreezePanes(ColSplit, RowSplit) записва фиксирано разделение на зададените колона и ред (броени от единица)

Редовете и колоните се номерират от единица в публичната повърхност на писателя и трябва да се подават в преден ред на работния лист

Преизползваеми стилове

AddCellStyle регистрира неизменна дръжка на стил на ниво пакет, а CloneCellStyle извежда нова дръжка, без да съхранява редове на работния лист

Дефинирани имена и хипервръзки

AddDefinedName, AddLocalDefinedName, AddDefinedRange и AddLocalDefinedRange добавят имена на ниво работна книга или лист преди финализирането на пакета

AddHyperlink, AddHyperlinkRange, AddInternalHyperlink и AddInternalHyperlinkRange извеждат външни отношения или вътрешни местоположения на листа за една клетка или диапазон

Валидиране на данни

AddDataValidation и AddDataValidationSqRef разкриват пълната повърхност на правилото, докато AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation и AddCustomValidation предоставят типизирани помощници

Условно форматиране

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors и AddConditionalFormatNotContainsErrors добавят скаларни правила

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 и AddConditionalFormatIconSet добавят визуални правила; ClearConditionalFormats премахва чакащите правила за текущия лист

Автофилтър и таблици

AddAutoFilterValue, AddAutoFilterDateGroup и AddAutoFilterSortCondition конфигурират филтъра на работния лист

AddTable създава част от таблица, а AddTableFilterValue, AddTableFilterDateGroup и AddTableSortCondition конфигурират нейния филтър и състояние на сортиране

Защита и прекъсвания на страници

ProtectSheet, UnprotectSheet, AddProtectedRange и ClearProtectedRanges конфигурират защитата на работния лист; ProtectWorkbook и UnprotectWorkbook конфигурират заключванията на структурата и прозорците на работната книга

AddHorizontalPageBreak и AddVerticalPageBreak извеждат ръчни прекъсвания на страници за текущия работен лист

Диагностика на съхранението на директния четец

TXLSDirectReader.SharedStringMemoryLimit ограничава декодираната памет за споделени низове, SharedStringsOnDisk отчита миграцията към временно индексирано съхранение, SharedStringCount отчита броя на заредените записи, а ParallelDiag разкрива ограничена диагностика на паралелния анализатор

Проекция на четеца и състояние на формулите

FirstRow, LastRow, IncludeColumn и ClearColumnProjection изблускват избора на редове и на колони (броени от единица) в парсера на работния лист, преди да се заделят памет за стойности, формули или rich text

IncludeFormulaText по подразбиране е включен; при изключване остават кешираните стойности, координатите, стиловете и HasFormula, докато FormulaTextAvailable става false, а Formula остава празна

Курсор за редове

TXLSRowCursor.Open приема XLS, XLSX, XLSM, ODS, CSV и TSV файлове или потоци; автоматичното разпознаване на ZIP разграничава ODS пакетите от Open XML работни книги, преди да бъде отворен лист

SelectSheet и SelectSheetByName избират работен лист; SheetCount, SheetNames, SheetIndex, RowIndex и Eof разкриват състоянието на обхождането, докато SharedStringMemoryLimit прилага същата ограничена политика за споделени низове като директния четец

FirstRow, LastRow, IncludeColumn и ClearColumnProjection използват едни и същи филтри, броени от единица, във всички формати на курсора; опциите на прохода не могат да се променят между FindFirst и EOF, но отново стават променими след EOF, избор на лист или затваряне

Всеки TXLSRowCursorCell докладва HasFormula независимо от FormulaTextAvailable; класическият XLS разкрива наличието на формула и кешираните резултати, без да твърди, че има недостъпен текст на токени, докато IncludeFormulaText може да потисне текста на формулите в XLSX и ODS преди натрупването

Обхождането на ODS държи един физически шаблон за ред, отрязва повтарящите се блокове от редове до поиска интервал, прескача директно между избраните колони в повторяващи се диапазони, минава напред през покритите клетки, без да ги връща като стойности, и докладва невалидни или ограничени от мрежата брой повторения чрез OnSkippedRecord

State разграничава xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled и xrcsFaulted; Cancel е idempotent, обезсмисля текущия ред и освобождава активния поток на работния лист, като запазва източника, така че изричен избор на лист може да започне нов проход

Потоковото претоварване по подразбиране използва xsoBorrowed, възстановява началната позиция на извикващия при затваряне и приема xsoOwned, за да прехвърли собствеността след успешно отваряне; неуспешните отваряния никога не консумират собствеността на извикващия

CurrentRowView заема масива на текущия ред, без да го копира, и проверява поколение при всеки достъп; напредване, избор на лист, отмяна, затваряне или унищожаване на курсора обезсмисля изгледа и при следващ достъп повдига EXLSRowCursorViewInvalidated

PeakRowBufferedBytes е монотонна оценка от последното Open на записите за клетки, управляваните payload обекти, rich text и данните от форматния бекенд, задържани за един логически ред; предназначена е за diagnostics на регресии с ограничена памет, а не за точно отчитане на heap

SheetPassesStarted брои успешните стартирания на бекенда на работния лист; прегледът на имената на листове или пропускането на лист през callback фасадата не отваря частта на работния лист

Адаптер с обратни извиквания за forward четене

TXLSForwardReader възлага декодирането на XLS, XLSX, ODS, CSV и TSV на TXLSRowCursor, превръща всяка клетка от текущия ред в обратно извикване OnCell и запазва същите договори за граници на редове, проекция на колони, състояние на формулите, rich text, парола, пропуснати записи, позиция в потока и ограничен буфер

PeakRowBufferedBytes и SheetPassesStarted разкриват общата cursor диагностика върху callback повърхността, а класическият XLS допълнително задържа ClassicBytesRead и ClassicPeakBufferedBytes

Събития на четеца и типове записи

Четецът и курсорът за редове разкриват незадължителни обратни извиквания и прости записи, всички декларирани в lxDirectRead. Всяко обратно извикване следва еднакъв образец: записът описва един предаван елемент, а задаването на Abort спира сканирането (събитията за листове допълнително приемат SkipSheet)

КлеткиOnCell (тип TXLSDirectCellEvent) доставя по един TXLSDirectCell за клетка, чийто Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) избира попълненото поле със стойност; rich text пътува като TXLSDirectRichText със записи TXLSDirectRichTextRun, всеки с TXLSDirectRichColor (вид TXLSDirectRichColorKind), TXLSDirectRichUnderline и TXLSDirectRichVertAlign, плюс незадължителни данни TXLSDirectPhoneticProperties и TXLSDirectPhoneticRun
Рамка на листаOnSheet (TXLSDirectSheetEvent) може да пропусне целия работен лист, преди клетките му да са разбрани; OnSkippedRecord (TXLSDirectSkippedEvent) докладва малформирано или отрязано съдържание с идентификатора на записа и причината
Оформление на листаOnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge и OnPane доставят записите TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge и TXLSDirectPane; състоянието на панела използва TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Състояние на курсораTXLSRowCursor.State е TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); потоковото претоварване на Open приема TXLSStreamOwnership (по подразбиране xsoBorrowed, xsoOwned за прехвърляне на собствеността), а CurrentRowView връща зает изглед IXLSRowCursorView, чийто Valid пази достъпа, а ValueByCol чете една клетка от заетия ред без копиране; изгледът се обезсмисля, когато курсорът напредва

Типове параметри и стилове на писателя

Типизираните помощници на писателя (lxDirectWrite) приемат записи и изброявания, така че извикванията остават без заделяне на памет: WriteRichString взима TXLSDirectRichText; AddCellStyle изгражда стил на ниво пакет от TXLSDirectCellStyle, чие подравняване (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), подчертаване (TXLSDirectUnderline), модел на запълване (TXLSDirectFillPattern) и страни на граница (TXLSDirectStyleBorder с TXLSDirectBorderSide) отразяват стиловия модел на OOXML. Условните формати подават TXLSDirectConditionalFormat с TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind и TXLSDirectIconSetType, валидирането на данни — TXLSDirectDataValidation, таблиците — TXLSDirectTable, хипервръзките — TXLSDirectHyperlink, дефинираните имена — TXLSDirectDefinedName, диференциалните стилове — TXLSDirectDxfStyle, коментарите — TXLSDirectComment, изображенията — TXLSDirectImage с TXLSDirectImageFormat, диаграмите — TXLSDirectChart с TXLSDirectChartSeries и TXLSDirectChartType, слетите области — TXLSDirectMergeRange, защитените диапазони — TXLSDirectProtectedRange, защитата на листа — множество TXLSDirectSheetProtectionOptions от TXLSDirectSheetProtectionOption, състоянието на сортиране на автофилтъра — TXLSDirectSortState, опциите за колони — TXLSDirectColumnOption, а геометрията на страницата — запис 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 изтегля редове от приложението: доставчикът записва клетките на реда директно през писателя и оставя Eof = False, или обявява изчерпване с Eof = True, за да спре цикъла. Помощниците преобразуват между координати и примитиви за защита: XLSDirectColName изобразява колона, броена от нула, като нейните A1 букви, XLSDirectParseRef анализира cell reference в A1, а XLSDirectPasswordHash изчислява застарелия password hash, който записите за защита на листа съхраняват

Свързани теми