Директно 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, който записите за защита на листа съхраняват