Документація 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 проштовхують вибір рядків та одновідлікових стовпців у парсер аркуша до виділення значень, формул чи форматованого тексту

IncludeFormulaText типово увімкнений; вимкнення зберігає кешовані значення, координати, стилі та HasFormula, тоді як FormulaTextAvailable стає хибним, а Formula залишається порожнім

Курсор рядків

SelectSheet і SelectSheetByName обирають аркуш; SheetCount, SheetNames, SheetIndex, RowIndex і Eof надають стан обходу, тоді як SharedStringMemoryLimit застосовує ту саму обмежену політику спільних рядків, що й пряме читання

TXLSRowCursor.Open приймає файли чи потоки XLS, XLSX, XLSM, ODS, CSV і TSV; автовизначення ZIP розрізняє пакети ODS і книги Open XML до відкриття аркуша

FirstRow, LastRow, IncludeColumn і ClearColumnProjection використовують ті самі одновідлікові фільтри в усіх форматах курсора; параметри проходу не можуть змінюватися між FindFirst і EOF, але знову стають змінними після EOF, вибору аркуша чи закриття

Кожен TXLSRowCursorCell повідомляє HasFormula незалежно від FormulaTextAvailable; класичний XLS розкриває наявність формули та кешовані результати, не претендуючи на недоступний текст токенів, тоді як IncludeFormulaText може пригнічувати текст формул XLSX і ODS до накопичення

Обхід ODS тримає один фізичний шаблон рядка, обрізає повторювані блоки рядків до запитуваного інтервалу, стрибає безпосередньо між вибраними стовпцями всередині повторюваних проміжків, просувається крізь покриті клітинки, не повертаючи їх як значення, і повідомляє недійсні чи обмежені сіткою кількості повторів через OnSkippedRecord

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

Перевантаження потоку типово використовує xsoBorrowed, відновлює початкову позицію викликача під час закриття та приймає xsoOwned для передавання володіння після успішного відкриття; невдалі відкриття ніколи не споживають володіння викликача

CurrentRowView позичає масив поточного рядка без копіювання та перевіряє покоління перед кожним доступом; просування, вибір, скасування, закриття чи знищення курсора роблять view недійсним і викликають EXLSRowCursorViewInvalidated при пізнішому доступі

PeakRowBufferedBytes — монотонна оцінка від останнього Open для записів клітинок, керованих payload, форматованого тексту та даних форматного бекенда, утримуваних для одного логічного рядка; вона призначена для діагностики регресії обмеженої пам'яті, а не для точного обліку купи

SheetPassesStarted рахує успішні запуски бекендів аркушів; перегляд назв аркушів чи пропуск аркуша через фасад колбеків не відкриває частину аркуша

Зворотний адаптер колбеків Forward Reader

TXLSForwardReader делегує декодування XLS, XLSX, ODS, CSV і TSV до TXLSRowCursor, перетворює кожну клітинку поточного рядка на колбек OnCell і зберігає ті самі контракти меж рядків, проєкції стовпців, стану формул, форматованого тексту, паролів, пропущених записів, позиції потоку та обмеженого буфера

PeakRowBufferedBytes і SheetPassesStarted розкривають спільну діагностику курсора на поверхні колбеків, тоді як класичний XLS додатково зберігає ClassicBytesRead і ClassicPeakBufferedBytes

Події читача та типи записів

Читач і курсор рядків розкривають опційні колбеки та прості записи, усі оголошені в lxDirectRead. Кожен колбек має однакову форму: запис описує один потоковий елемент, а встановлення Abort зупиняє сканування (події аркушів додатково приймають SkipSheet)

КлітинкиOnCell (тип TXLSDirectCellEvent) доставляє TXLSDirectCell для кожної клітинки, чиїй Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) обирає заповнене поле значення; форматований текст подорожує як 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 повертає позичене view IXLSRowCursorView, чия властивість Valid охороняє доступ, а ValueByCol читає одну клітинку позиченого рядка без копіювання; view стає недійсним, коли курсор просувається

Типи параметрів і стилів запису

Типізовані помічники записувача (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 розбирає посилання на клітинку A1, а XLSDirectPasswordHash обчислює застарілий хеш пароля, який зберігають записи захисту аркуша

Див. також