Дополнительные члены API библиотеки
Эта страница дополняет справочник по открытым типам, которые поддерживают основные API книги, листа, отрисовки, импорта, диагностики и средства просмотра, но не требуют отдельного тематического руководства
Фильтрация и условное форматирование
TXLSAutofilter | Add, AddAutofilterData, AssignFrom, Clearи ParseAutofilterData изменяют или импортируют определение фильтра; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) восстанавливает инклюзивные границы с отсчётом от единицы, не удаляя загруженные критерии или фигуры выпадающих списков, и игнорирует неположительные или перевёрнутые границы, а также количество столбцов, не совпадающее с загруженными полями; Defined, FirstRow, FirstCol, LastCol, LastRowи FieldCount открывают его активные границы и количество отфильтрованных столбцов |
TXLSAutofilterItem | Shape открывает рисунок кнопки фильтра, связанный с элементом, а загруженный критерий фильтра доступен как запись операнда TXLSAutofilterDOPER — DataType выбирает форму операнда, а grbitSgn несёт биты знака и флагов — для осмотра или правок с полным Roundtrip |
TXLSDataBarSpec | AxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTintи ClearAxisThemeColor управляют осью; Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositiveи NegativeBorderColor управляют внешним видом гистограммы; IsIndexedColor, IndexedColorIndexи ClearIndexedColor управляют цветом гистограммы как индексом палитры |
TXLSIconSetSpec | ThresholdEqualsInclude выбирает нестрогое или строгое сравнение для каждого порога значка |
TXLSCfValue | IsIndexedColor и IndexedColorIndex сообщают о цвете порога, хранящемся как индекс устаревшей палитры, ClearIndexedColor снова удаляет эту форму, а цвета темы и явные цвета остаются доступными через существующие методы доступа |
TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpecи TXLSDxfStyle принимают AttachWriteGuardOwner, связывающий объект правила с владеющей книгой, чтобы изменения автоматически получали защиту записи; владелец реализует TXLSCondFormatWriteGuardOwner, чей единственный метод AcquireWriteGuard передаёт правилу защиту записи книги. TXLSDxfStyle добавляет FontColorIndex с FontColorIsIndexed , а также пары FillFgColorIndex / FillFgColorIsIndexed и FillBgColorIndex / FillBgColorIsIndexed для цветов правил в виде индексов палитры, плюс именованные переопределения дифференциального шрифта — FontName, FontSizeи FontScheme (пустая строка, размер в пунктах или слот шрифта темы вроде major / minor) — рядом с уже существующими членами полужирного, курсива, подчёркивания и цвета; каждое присваивание получает защиту записи и помечает правило «грязным» для повторной эмиссии
TXLSConnections, TXLSDataTablesи TXLSQueryTables открывают OnAcquireWriteGuard (типы TXLSConnectionAcquireWriteGuard, TXLSDataTableAcquireWriteGuardи TXLSQueryTableAcquireWriteGuard) — перехватчик, который их пути изменения используют, чтобы получить IXLSWorkbookWriteGuard владеющей книги перед изменением и увеличить поколение книги после него; защита записывает StartGeneration, а Complete отмечает запись завершённой, чтобы зависимые кэши могли перестроиться
Сохранённые подключения данных несут типизированное описание: TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo) классифицирует подключение, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt) фиксирует его режим аутентификации, а каждое значение параметра подключения помечено видом TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell). Таблицы данных «что если» сообщают вид своего сохранённого определения через TXLSDataTableKind
Таблицы данных «что если» и группировка сводных таблиц
TXLSDataTable | Assign, ContainsCellи IsRoot копируют таблицу и проверяют её; Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRowи RowInputDeleted открывают сохранённое определение вычисления |
TXLSDataTables | Add, AddExisting, Delete, Clear, Assign, AdjustForShiftи Offset обслуживают коллекцию; FindByCell и FindRoot находят таблицу, содержащую заданную ячейку или начинающуюся с неё; Count, Itemsи OnChange открывают состояние коллекции |
TXLSPivotCacheField | GroupBaseField и GroupParentField открывают связи между сгруппированным полем и его исходным или родительским полем |
Пороги наборов значков можно отрисовать или проверить программно: XLSCfIconSetCount сообщает, сколько значков определяет TXLSIconSetType , а XLSBuildCfIconGeometry заполняет TXLSCfIconGeometry примитивами (TXLSCfIconPrimitiveс видом TXLSCfIconPrimitiveKind: cfipPolygon, cfipEllipse, cfipRect, cfipLine) и точками (TXLSCfIconPoint), которыми рисуется один значок, чтобы собственные отрисовщики совпадали со встроенными фигурами значков Excel
Диагностика, трассировка формул и валидация
TXLSDiagnostic | Code, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetNameи StreamOffset идентифицируют одну диагностику средства разбора, записи или пакета |
TXLSDiagnostics | Add добавляет диагностику, Clear сбрасывает коллекцию, а Count вместе с Items перечисляют её записи |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal) классифицирует одну диагностику, а TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport) называет этап, на котором она возникла; обработчики OnDiagnostic читают и то и другое из доставленного TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep, DependencyCount, NodeCountи StepCount открывают текущий снимок отладчика и размеры его трассировки |
TXLSFormulaTracer | StepCount сообщает число записанных шагов вычисления |
TXLSImportCheck | AddRule, AddUniqueRuleи AddCrossColumnRule настраивают предикаты столбцов, составную уникальность и типизированные сравнения; Check возвращает структурированные нарушения из сохранённых значений листа и кэшей формул без пересчёта или материализации упакованных ячеек; HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCountи Violation открывают границы, callback и результаты; Annotate и KeepOnlyViolations — явные операции книги-исправления; о типах, границах, системах дат, идентичности кортежей и поведении при сбое см. схемы валидации импорта |
Схемы валидации импорта
TXLSImportCheck из lxImportCheck проверяет TXLSXWorksheet по правилам, принадлежащим приложению; он осматривает сохранённые скалярные значения и сохранённые результаты формул, с координатами листа с отсчётом от единицы и без неявного преобразования текста в число, текста в дату или текста в Boolean
Validator := TXLSImportCheck.Create;
try
Validator.HeaderRow := 1;
Rule := Validator.AddRule(2);
Rule.Name := 'quantity';
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkInteger;
Rule.MinimumValue := 1;
Rule.MaximumValue := 1000;
Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
FailureCount := Validator.Check(Sheet);
if FailureCount > 0 then
Validator.Annotate(Sheet, 'Import validator');
finally
Validator.Free;
end;HeaderRow > 0 начинает проверку со следующей строки и имеет приоритет над FirstRow; иначе FirstRow по умолчанию равен 1; LastRow = 0 использует последнюю использованную строку листа, а положительный LastRow может включать отсутствующие ячейки, не создавая их; столбцы должны быть в пределах от 1 до 16,384, а активные границы строк данных — от 1 до 1,048,576
Правила столбцов и явные типы
TlxImportColumnRule | Column, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKindи DateSerialMode настраивают один столбец; MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusiveи MaximumInclusive настраивают границы; Validate проверяет конфигурацию схемы, а PreparePattern подготавливает регулярное выражение; две перегрузки Check возвращают Boolean с сообщением об ошибке и опционально TlxImportViolationKind |
TlxImportRuleFlags | irRequired, irTextLength, irPattern, irUniqueи irCallback сохраняют свои существующие проверки; irValueType включает ValueKind, а irValueRange — настроенные границы; столбец без флагов не проверяется |
TlxImportValueKind | ivkAny принимает поддерживаемые конечные скалярные значения, ivkNumber — конечные числовые Variant, ivkInteger дополнительно требует целое значение, ivkDate — Variant даты или явно включённые порядковые номера Excel, ivkBoolean требует Boolean Variant, а ivkText — строковый Variant |
TlxImportDateSerialMode | idsNone — значение по умолчанию и держит числовые значения отличными от дат; idsExcel1900 и idsExcel1904 явно интерпретируют числовые значения для столбца, использующего irValueType с ValueKind = ivkDate |
AddRule(Column) заменяет и освобождает любое предыдущее правило этого столбца; предикаты типа значения, диапазона, длины и шаблона пропускают отсутствующие значения, null и пустые строки, тогда как irRequired сообщает о них; уникальность сохраняет описанные ниже различные политики; непустой пробельный текст остаётся значением; число не считается Boolean, дата не считается обычным числом, а похожая на число строка остаётся текстом
Присвоение MinimumValue или MaximumValue включает эту границу; любой из переключателей HasMinimum или HasMaximum может снова её отключить; оба переключателя инклюзивности по умолчанию True; границы должны быть конечными типизированными числами или датами, а две границы должны быть сравнимы и описывать непустой интервал; перевёрнутые, отсутствующие, несовместимые или пустые границы возбуждают исключение до начала валидации листа
Числовые границы сравнивают числовые значения, а границы дат сравнивают даты; сравнения целое-с-целым сохраняют все биты Int64 и UInt64; значения несовместимой категории не проходят проверку диапазона; предикаты длины текста и регулярных выражений продолжают осматривать текстовое представление скаляра, а проверки regex сохраняют существующее поведение IsMatch, поэтому используйте якоря вроде ^...$, когда должен совпасть весь текст; недопустимое регулярное выражение ради совместимости отключает свою проверку шаблона
Отформатированные как даты значения Excel
Ячейка, импортированная из Excel, может содержать числовой порядковый номер, даже когда её числовой формат отображает дату; выбирайте режим порядкового номера явно, если это принятая схема импорта; режим влияет только на валидацию и никогда не меняет сохранённое значение ячейки
Rule := Validator.AddRule(4); Rule.Flags := [irRequired, irValueType, irValueRange]; Rule.ValueKind := ivkDate; if Sheet.Workbook.Date1904 then Rule.DateSerialMode := idsExcel1904 else Rule.DateSerialMode := idsExcel1900; Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1)); Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));
VarFromDateTime объявлен в Variants, а EncodeDate — в SysUtils; числовые порядковые номера должны быть неотрицательными и разрешаться до 1 января 10000 года; дробные порядковые номера сохраняют своё время суток; система 1900 отклоняет каждый номер от 60 включительно до 61 исключительно, потому что этот интервал обозначает фиктивный високосный день; система 1904 отображает нулевой номер в 1 января 1904 года
Границы дат включают время суток, поэтому максимум, установленный на полночь 31 декабря, исключает более позднее время этого дня; используйте исключающую верхнюю границу 1 января следующего года, когда должен приниматься весь последний день; текстовые даты вроде 10/08/2026 остаются текстом независимо от настроенного режима порядковых номеров
Составная уникальность и межстолбцовые сравнения
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | Добавляет независимое ограничение кортежа по упорядоченному непустому списку различных столбцов; Name идентифицирует правило, Title служит префиксом его сообщения, ColumnCount и базирующиеся на нуле Columns[Index] открывают его членов, а SkipIncompleteRows по умолчанию True |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | Добавляет сравнение в одной строке с read-only LeftColumn и RightColumn, редактируемыми Comparison, Name, Title и SkipBlankValues, который по умолчанию True |
TlxImportComparison | icEqual, icNotEqual, icLess, icLessOrEqual, icGreaterи icGreaterOrEqual выбирают отношение; числовые пары и пары дат сравнивают свои значения, пары Boolean упорядочивают False перед True, а строковые пары сравнивают кодовые единицы UTF-16 ordinally с учётом регистра |
Составные ключи сохраняют точный тип Variant и текстовую идентичность каждого члена; Integer(1), Double(1), строка '1', Boolean и дата — различные члены; нет складывания регистра, нормализации Unicode, разбора по локали или неоднозначности разделителей; комбинации вроде ('ab', 'c') и ('a', 'bc') остаются различными; каждый проход валидации начинает свежий индекс кортежей
Когда SkipIncompleteRows = True, отсутствующий, null или пустой строковый член исключает строку из уникальности кортежей; установка в False включает такие члены с их исходными идентичностями Variant; дубликат сообщает первый столбец кортежа как адрес ячейки и первую совпавшую строку через FirstDuplicateRow
Существующий одноколончатый irUnique сохраняет своё текстовое сопоставление без учёта регистра и пропускает отсутствующие или null значения; используйте AddUniqueRule([Column]), когда для одного столбца нужна строгая типизированная идентичность
Межстолбцовые сравнения никогда не приводят строки к числам, числа к Boolean или обычные числа к датам; смешанные несовместимые категории не проходят даже для icNotEqual; строковые сравнения различают составленную и разложенную формы Unicode, сохраняют встроенные нулевые символы и используют порядок «сначала более короткий префикс»; когда SkipBlankValues = False, любой пустой операнд даёт межстолбцовое нарушение
Структурированные результаты и книги-исправления
TlxImportViolation | Row, Col, SheetNameи Address идентифицируют ячейку, причём Address в нотации A1; ValueText и ErrorText несут отображаемую информацию; RuleName и Kind идентифицируют настроенное правило и категорию сбоя; RelatedColumn идентифицирует второй операнд для межстолбцового сбоя, а FirstDuplicateRow — исходную строку для сбоев уникальности |
TlxImportViolationKind | ivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUniqueи ivCrossColumn различают поддерживаемые категории сбоев |
Check(Sheet) возвращает количество нарушений, а ViolationCount вместе с базирующимся на нуле Violation(Index) перечисляют отчёт; одно правило столбца сообщает свой первый не прошедший предикат, тогда как независимо настроенные правила кортежей и сравнений могут добавить дальнейшие нарушения для той же ячейки; присваивайте осмысленные значения Name, когда вызывающему коду нужны стабильные идентификаторы правил приложения
Ячейки с формулами проверяются по их сохранённым кэшированным значениям; формула без сохранённого кэшированного результата сообщает ivFormulaCacheMissing, а результат-ошибка — ivCellError; явно пересчитайте перед проверкой, когда нужны свежие результаты формул; валидация не обращается к внешним источникам, не меняет определения формул и не вычисляет формулы без кэша
OnVerifyCell сохраняет сигнатуру callback TlxImportVerifyCell и выполняется после успешных применимых предикатов столбца и проверок уникальности; он возвращает Boolean и может задать сообщение об ошибке приложения; callback не должны менять книгу или схему валидации, а записи в книгу отклоняются арендой чтения; исключения callback распространяются, и аренда освобождается для последующих операций
Check никогда не аннотирует, не удаляет строки и не материализует упакованные значения; используйте Annotate после проверки, чтобы применить красный шрифт и дополнить текст ошибок в существующих примечаниях, или явно вызовите KeepOnlyViolations, чтобы удалить непровалившие строки и создать книгу-исправление; эти методы изменяют переданный лист, поэтому вызывайте их на предназначенной книге после изучения отчёта
Валидация заимствует лист и книгу на время синхронного вызова; она не перенимает владение объектами вызывающего и не требует книги, принадлежащей интерфейсу; аренда чтения защищает релевантные снимки сохранённых ячеек и доступ к кэшам сохранённых формул на протяжении всей проверки
Политики сохранения внешних ссылок
TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);
property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
xluPromptUser; xluNever и xluAlways меняют только сохранённый в книге режим обновления и никогда не разрешают и не инициируют доступ к внешним файлам или сети
Аудит вычислений и подсказки книги
function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;
function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;
TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
xlcaiCircularReference, xlcaiExternalReferenceDenied,
xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
xlcaiInternalFailure);
TXLSCalculationAuditIssue = record
Kind: TXLSCalculationAuditIssueKind;
SheetIndex: Integer;
SheetName: WideString;
Row: Integer;
Col: Integer;
Formula: WideString;
Symbol: WideString;
Expected: Variant;
Actual: Variant;
ResultCode: Integer;
Stack: WideString;
ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;
TXLSRecalcAuditProgress = procedure(ASender: TObject;
ACurrent, ATotal: Integer; var ACancel: Boolean) of object;
property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
RecalcAndVerify сводит сбои символов формул и расхождения кэшированных значений в стабильные структурированные категории с координатами листа, формулами, символами, ожидаемыми и фактическими значениями и ограниченным усечением, не трогая кэши и семантику книги. RecalcAndVerifyEx выполняет глубокий аудит: он один раз вычисляет каждую формулу через граф зависимостей в изолированный слой результатов, чтобы зависимые ячейки читали значения этого прохода, а не устаревшие кэши, классифицирует сбои вычисления (неподдерживаемые аргументы, циклические ссылки, запрещённые или отсутствующие внешние ссылки, пропущенные таблицы данных, отмена, внутренние сбои) с кодами результатов, записывает ограниченный стек вызовов для каждого сбоя, соблюдает лимит проблем и приёмник прогресса и отмены, а также остаётся доступным только для чтения, пока ApplyResults не зафиксирует пересчитанные значения атомарно после полностью успешного прохода по неизменённой структуре книгиAbsoluteTolerance и RelativeTolerance управляют отчетами о несовпадениях, а не промежуточными вычислениями или явным применением кэша
Для числовых результатов несовпадением считается ситуация, когда абсолютная разница превышает AbsoluteTolerance , а при включенном относительном допуске — еще и RelativeTolerance * max(abs(Expected), abs(Actual))
Равенство на любом из порогов допускается; изменившиеся значения все равно попадают в слой аудита, поэтому зависимые формулы видят текущее вычисление, и ApplyResults фиксирует их, даже если разница не дотягивает до отчетной
Аудит в режиме только для чтения никогда не меняет сохраненные кэшиTXLSCalculationAuditReport.Issues — это TXLSCalculationAuditIssue; Kind выбирает одну из категорий xlcai* , Expected / Actual несут сравниваемые значения для расхождений кэша, Stack — ограниченная цепочка вызовов вычисления, отображаемая как Sheet!A1 > Sheet!B2 (внешний кадр первым), а ExternalTarget описывает внешнюю книгу для проблем внешних ссылок. TXLSRecalcAuditOptions.OnProgress — приёмник TXLSRecalcAuditProgress , получающий прогресс ACurrent / ATotal узлов и способный установить ACancel , чтобы остановить аудит на границе следующего узла с единственной проблемой xlcaiCancelled issueRunCalculationAudit — вход в движок, через который работают обёртки аудита уровня книги; он принимает ту же запись опций. FormulaIsVolatile сообщает, заставит ли формула пересчитываться на каждом проходе (вызовы вроде NOW, RAND, TODAY, OFFSET, INDIRECTили неразрешимая ссылка)AuditOverlayWrite сохраняет замещающее значение для одной ячейки (индекс листа с единицы, строка и столбец с нуля — как принято в вычислителе), AuditOverlayRead и AuditOverlayHash читают его, а AuditOverlayClear опустошает слой. Наложенные значения возвращают обычные геттеры значений ячеек, поэтому пересчёт и глубокий аудит видят их, не изменяя ячейки листа; очистка слоя возвращает сохранённые значенияСостояние формул таблиц и IME
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues значения False опускает классические записи XCT и CRN либо поддерево sheetDataSet внешней книги XLSX, сохраняя цели ссылок, имена листов, внешние определённые имена, связи, ссылки формул, неизвестный XML и кэш в памяти; возвращение свойства в True для той же книги может снова сериализовать этот сохранённый кэш
Проверка и удаление областей задач веб-надстроек
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 и вызывают исключение до изменения, а классический XLS и ODS возвращают False, 0и -1 без сканирования пакета
Политика отображения объектов книги
TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
xlsodmHideAll);
property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
workbookPr.showObjects; отсутствующие значения по умолчанию дают xlsodmShowAll, нетронутые зарезервированные полезные нагрузки Classic и неподдерживаемые токены XLSX остаются без потерь, а явные присваивания создают только канонические значения
ExportObjectPlaceholders запрашивает ту же дешёвую политику без декодирования изображений и построения сцен диаграмм
xlsodmHideAll предотвращает сбор рисунков и обусловленное объектами расширение диапазона до начала отрисовки; преобразование книги переносит все три состояния, ODS пишет полные рисунки для режима заполнителей и опускает вывод рисунков и медиа для режима полного скрытия, а фоны листов остаются независимыми
Значения калибровки отрисовки и снимки
TXLSRenderCalibration = record
WidthCorrection: Double;
HeightCorrection: Double;
LineSpacing: Double;
CellMarginFactor: Double;
ScreenScaling: Integer;
MeasurementDpi: Integer;
end;
function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
out AInvalidField: TXLSRenderCalibrationField): Boolean;
1, 1, 1, 1, 100и 96; поправки ширины и высоты должны быть больше нуля и меньше двух, межстрочный интервал ограничен диапазоном (0, 4], поля ячеек — [0, 4], масштабирование экрана — [100, 500] процентов, а измерительный DPI — [36, 2400]RenderCalibration, CaptureRenderCalibrationи ResetRenderCalibration ; присваивание всей записи проверяется до изменения, а каждый захват возвращает независимый, неизменный по соглашению снимок значений для одной операции отрисовки
Геометрия отрисовки и измерение шрифтов
TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);
TXLSRenderFont = record
Name: WideString;
Size: Double;
Styles: TXLSRenderFontStyles;
Charset: Byte;
end;
function CreateXLSRenderGeometry(
const ACalibration: TXLSRenderCalibration;
AWorkbookGeneration: UInt64;
ABackend: TXLSRenderGeometryBackend;
ACacheCapacity: Integer = 4096): IXLSRenderGeometry;
property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
IXLSRenderGeometry владеет одной неизменной калибровкой, поколением книги, идентичностью внутреннего модуля, службой измерения и ограниченным локальным для операции кэшем метрик; CreateXLSRenderGeometry использует GDI, а CreateXLSPortableCairoRenderGeometry в lxPortableCairo использует явные байты шрифтов с FreeType/HarfBuzz на нативном Linux или macOS; MeasureText возвращает ширину и высоту в пикселях, высоту строки, подъём, спуск и количество строк, а MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPointsи UsableCellWidthPixels предоставляют общие геометрические преобразования
MarkSheet , а TXLSPaginationModel.Build захватывает одну службу для выбранного RenderBackend; точки входа PDF, SVG, растрового изображения, предварительного просмотра, средства просмотра книг и HTML выбирают собственный внутренний модуль перед выводом, изменение калибровки книги не может изменить существующий снимок, и вывод не записывает размеры листа
xlsrgbHtml , а инкрементный TXLSXHtmlExportSession захватывает её один раз в BeginExport и повторно использует этот снимок для всех листов; оба экспортёра открывают удерживаемую службу через RenderGeometry для диагностики калибровки и кэша
IXLSRenderGeometry — WorkbookGeneration, CacheCapacityи CacheEntryCount — сообщают привязанное поколение и заполнение кэша для диагностики, а ImplicitWidthMaximumDigitWidthPixels возвращает измерение ширины цифры, лежащее в основе эмуляции неявных ширин столбцов
MeasureText заполняет запись TXLSRenderTextMetrics (ширина и высота в пикселях, высота строки, подъём, спуск и количество строк) из TXLSRenderFont , чей член Styles — набор флагов TXLSRenderFontStyle (полужирный, курсив, подчёркивание, зачёркивание)
Импорт, генерация кода, сравнение и мониторинг
TXLSHTMLImport | LoadFromHTML импортируют содержимое таблицы HTML из потока или файла на лист с необязательными начальными координатами, выбором таблицы и десятичным разделителем |
TXLSCodeGen | Language (тип TlxCodeGenLanguage: lcgDelphi или lcgCppBuilder) выбирает диалект исходного кода генерируемых инструкций, GenerateToList записывает сгенерированный код книги в список строк, а TlxCodeGenOptions расширяет вывод объединениями, шириной столбцов или форматами чисел (cgoMerges, cgoColumnWidths, cgoNumberFormats; листы и ячейки выводятся всегда) |
TXLSXWorkbookCompare | Compare сравнивает типизированные сохранённые ячейки, текст формул, наличие листов и объединения; Options добавляет кэши формул, базовые стили ячеек и геометрию строк или столбцов, SetNumericTolerance настраивает числовое равенство, а Count, Diffи Report открывают упорядоченные результаты; см. сравнение книг |
TXLSFileMonitor | IntervalMs задаёт интервал опроса, а SynchronizeEvent — синхронизированную доставку обратного вызова; обработчик OnFileChanged может деактивировать или уничтожить монитор либо изменить FileName , чтобы следить за другим файлом |
TXLSCSVLoader and TXLSCSVSaver | Загрузчик разбирает текст с разделителями в сетку Variants в памяти — ParseFile и ParseStream заполняют сетку, CellValue, RowCountи ColCount читают её обратно — с автоматически определяемым разделителем (ValueSeparator) и кодировкой (TXLSCsvEncoding: системная ANSI, UTF-16, UTF-8) и необязательным повышением типов, управляемым DetectTypes и записями ColumnTypes по столбцам (TXLSCsvColumnType: авто, текст, число, дата, логическое значение, пропуск); SkipRows, AutoTrim, LocaleTolerantNumbersи FieldWidths уточняют обработку фиксированной ширины и локали. TXLSCSVSaver.SaveAs записывает сетку обратно с экранированием по RFC 4180, а QuoteAllStrings принудительно экранирует все строки; TXLSTSVSaver наследуется от сохранителя для вывода с разделителем-табуляцией |
Сравнение книг
TXLSXWorkbookCompare в lxCompare сравнивает два экземпляра TXLSXWorkbook, не пересчитывая формулы и не изменяя ни одну из книг; листы сопоставляются по имени без учёта регистра, и одно лишь изменение порядка листов не создаёт различия
Значение Options по умолчанию пусто, а обе величины допуска по умолчанию нулевые; сравнение по умолчанию сообщает о добавленных или удалённых листах, добавленных или удалённых сохранённых ячейках, изменённых типизированных литеральных значениях, изменённом тексте формул и добавленных или удалённых объединённых диапазонах
Сравнение литералов различает числа, текст, Boolean-значения, даты, ошибки и пустые значения: число 1 отличается от текста '1', Boolean отличается от своего текстового написания, даты сохраняют собственный тип, а ошибки сравниваются по сохранённому коду ошибки; числовые типы хранения с равными значениями сравниваются как равные, при этом различные значения Int64 остаются различными при точном сравнении
lcoFormulaCachedResults | Для ячеек с совпадающим текстом формул сравнивает существующий кэшированный результат и отличает отсутствующий или инвалидированный кэш от доступного; загруженные и вычисленные кэши с одинаковым типизированным значением сравниваются как равные |
lcoCellStyles | Сравнивает разрешённые базовые стили по совпадающим координатам сохранённых ячеек, включая шрифты, заливки, градиенты, границы, выравнивание, числовые форматы и защиту ячейки; несвязанный порядок вставки в пуле стилей не создаёт различий, а цвета тем разрешаются относительно текущей темы каждой книги |
lcoAxisGeometry | Сравнивает эффективные высоты строк, ширины столбцов, флаги скрытия, уровни структуры, флаги свёрнутости и значения листа по умолчанию; явный размер, равный эффективному значению по умолчанию, сравнивается как равный неявному размеру |
lcoDefinedNames | Сравнивает имена с областью действия книги и листа, их определения формул, видимость, примечания и флаги макросов; область действия следует именам листов, а порядок вставки не создаёт различий |
lcoDataValidations | Сравнивает определения проверок в сохранённом порядке, включая нормализованные целевые диапазоны, формулы, операторы, подсказки, сообщения об ошибках и управляющие флаги; изменение порядка целевых диапазонов внутри одного определения не создаёт различия |
lcoConditionalFormats | Сравнивает определения условного форматирования в сохранённом порядке, включая эффективный приоритет, поведение stop-if-true, целевые диапазоны, формулы, дифференциальные стили и поддерживаемые настройки цветовых шкал, гистограмм и наборов значков; идентификаторы пулов стилей и индексированной палитры разрешаются в свои семантические значения |
lcoTables | Сопоставляет таблицы по имени и сравнивает диапазоны, заголовки, итоги, настройки стилей, примечания, имена столбцов, подписи, формулы, флаги массивов, уникальные имена, имена подключений, критерии фильтров и условия сортировки; id таблиц, id столбцов и порядок вставки не создают различий, при этом id дифференциальных стилей цветового фильтра и сортировки разрешаются во внешний вид |
lcoDrawings | Сравнивает типизированные определения рисунков в порядке рисования, сохраняя порядок дочерних элементов групп и порядок групп построения диаграмм; поддерживаемые канонические определения покрывают изображения, текстовые поля, диаграммы, группы, полные типизированные представления slicer и типизированные представления шкал времени, причём непрозрачные или неподдерживаемые узлы рисования возбуждают EXLSSemanticSnapshot |
lcoBlankStyleRegions | Сравнивает разрешённые базовые стили по координатам без сохранённой ячейки с обеих сторон, включая значения листа по умолчанию и виртуальные наложения стилей; эквивалентные разбиения прямоугольников сравниваются как равные, а равные соседние изменения объединяются в прямоугольники без материализации ячеек |
lcoRichTextRuns | Сравнивает эффективные шрифты и текст прогонов в совпадающих ячейках с сохранённым текстом, наследует базовый шрифт для опущенных свойств прогона, игнорирует пустые прогоны и объединяет соседние прогоны с одинаковыми эффективными шрифтами; обычный текст совпадает с эквивалентным прогоном rich text со шрифтом по умолчанию |
lcoPivotTables | Сопоставляет типизированные определения сводных таблиц по имени и сравнивает привязки источников, структуру, поля, упорядоченные члены представления, агрегации данных, фильтры, ссылки группировки, вычисляемые определения, стили и флаги нативной материализации; id кэшей и общих членов разрешаются в идентичности источников и типизированные значения |
lcoPivotCaches | Сопоставляет локальные типизированные определения кэшей сводных таблиц по идентичности источника и сравнивает метаданные обновления, метаданные полей, сгруппированные подписи и диапазоны, неупорядоченные домены общих членов и упорядоченные типизированные значения записей; числовые, текстовые, Boolean, даты, ошибки и пустые члены остаются различными, даты сохраняют точность binary64, а id кэшей и порядок слотов общих членов не создают различий |
lcoSlicerState | Сопоставляет именованные представления и кэши slicer, включая привязки столбцов таблиц или не-OLAP сводных таблиц, имена связанных сводных таблиц, типизированные выборы членов, настройки перекрёстной фильтрации и сортировки, подпись, позицию прокрутки, раскладку столбцов, размеры, стиль, флаги блокировки и подписи и геометрию якоря; привязки разрешают id таблиц, столбцов, листов и кэшей |
lcoTimelineState | Сопоставляет именованные типизированные представления шкал времени и локальные не-OLAP кэши, включая привязки исходных полей и связанных сводных таблиц, активный выбор дат, подпись, уровень и границы листа; неактивные выборы опускают неиспользуемые конечные даты |
Options имеет тип TlxCompareOptions — набор TlxCompareOption; включение опции добавляет её различия к сравнению по умолчанию
SetFeatureLimits(MaxBytes, MaxItems) проверяет оба положительных лимита до изменения любой настройки; MaxFeatureBytes по умолчанию равен 64 МиБ, MaxFeatureItems — 1,000,000, а отдельные сеттеры сохраняют ту же атомарную валидацию
Бюджеты функций покрывают агрегированные отсоединённые канонические байты и сосчитанные записи из обеих книг, включая прогоны rich text, узлы XML фильтров, поля Pivot, членов доменов и значения записей, а также подключения slicer или шкал времени; читатели проверяют количества и большие текстовые входы до построения нативного XML, обеспечивают ограниченные выходные потоки и возбуждают EXLSXSemanticBudget при превышении лимита
SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) проверяет оба аргумента до изменения любой настройки; оба должны быть конечными и неотрицательными, а отдельные сеттеры AbsoluteTolerance и RelativeTolerance используют ту же валидацию
Числовые литералы и числовые значения кэшей сравниваются как равные, когда их абсолютная разность не превышает AbsoluteTolerance или их разность относительно большего абсолютного значения не превышает RelativeTolerance; порог ноль сохраняет точное равенство, относительное вычисление избегает переполнения для крайних противоположных значений, а допуск не приводит текст и не применяется к датам, стилям или геометрии
LeftName и RightName задают необязательные отображаемые имена, используемые строками Report, по умолчанию left и right; имена влияют только на отчётность, а не на сопоставление листов или сравнение
Comparer := TXLSXWorkbookCompare.Create;
try
Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
lcoAxisGeometry];
Comparer.SetNumericTolerance(0.001, 0.000001);
DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
for I := 0 to DifferenceCount - 1 do
begin
Entry := Comparer.Diff(I);
ReportLines.Add(Entry.Describe);
end;
finally
Comparer.Free;
end;Compare возвращает количество различий, Count читает это количество после, а Diff(Index) использует индексацию с нуля и возвращает принадлежащий сравнителю TlxCompareDiff; удерживайте сравнитель при чтении его записей и заново получите записи после другого успешного сравнения
Каждая запись предоставляет Kind, Sheet, однобазовые Row и Col, где применимо, Ref, LeftText, RightText и типизированные значения LeftKind / RightKind; TlxCompareValueKind содержит lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvErrorи lcvFormula, причём lcvNone используется для отсутствующей стороны или различия, не являющегося значением
TlxCompareKind сохраняет lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAddedи lckMergeRemoved, а также добавляет lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChangedи lckColumnGeometryChanged
Различия стилей несут стабильные канонические отпечатки стилей в LeftText и RightText; различия геометрии несут сравниваемые размер, скрытие, структуру и свёрнутость, причём Ref идентифицирует затронутый непрерывный интервал оси, Row установлен на его первую строку и Col в ноль для строк, либо Col установлен на его первый столбец и Row в ноль для столбцов
Различия функций используют lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChangedили lckTimelineChanged; Change — это lccChanged, lccAddedили lccRemoved, и каждая присутствующая сторона несёт канонический отпечаток своего определения, тогда как отсутствующая сторона несёт пустую строку
lckRichTextChanged идентифицирует изменённое определение прогона по координате его ячейки и несёт канонические отпечатки прогонов в LeftText и RightText; числовой допуск применяется к литералам ячеек и кэшам формул, тогда как типизированные определения функций сравниваются точно
Ссылки функций идентифицируют имена с областью действия или имена таблиц либо используют позиции последовательности с отсчётом от единицы для определений проверок, условного форматирования и рисунков; вставка или перемещение упорядоченной функции может изменить несколько позиций, при этом записи имён уровня книги имеют пустой Sheet
lckBlankStyleRegionChanged идентифицирует изменённый пустой прямоугольник через Row, Col, инклюзивные LastRowи LastCol и его A1 Ref; сохранённые координаты обрабатываются обычным сравнением ячеек и lcoCellStyles, поэтому включите обе опции стилей, чтобы осматривать сохранённые ячейки и пустые области вместе
Describe форматирует одну запись, а Report(List) добавляет отформатированные записи в принадлежащий вызывающему коду TStrings; изменение типизированного значения включает метки типов, когда типы различаются, а результаты сортируются по имени листа, строке, столбцу, виду различия и ссылке, а не по порядку вставки ячеек
Сравнение удерживает аренды чтения, обходит сохранённые ячейки через отсоединённые снимки курсоров и удерживает упакованное хранилище; геометрия разделяет границы сохранённых метаданных и компактные интервалы повторяющихся строк, а сравнение пустых стилей прочёсывает активные границы прямоугольников и сохранённых ячеек, не сканируя прямоугольную сетку в миллион строк; работа растёт с числом сохранённых функций, пересечений областей и сообщённых различий
Неудавшееся сравнение сохраняет предыдущий успешный результат; недопустимое присвоение допуска также сохраняет существующие настройки и результат, а передача nil-книги очищает результат и возвращает ноль
Это сравнение покрывает сохранённое содержимое ячеек фасада XLSX и выбранные типизированные определения функций; написание формул имён, проверок, условного форматирования, таблиц и диаграмм нормализуется через семантический парсер формул, тогда как вычисляемые формулы Pivot сохраняют свой сохранённый текст определения
Фильтры таблиц принимают поддерживаемые формы custom, списка значений, группы дат, цвета, значка, динамические и top-count, а также условия сортировки; независимые столбцы фильтров и записи наборов значений нормализуют свой порядок, значения Boolean по умолчанию и числовые написания нормализуются, а порядок условий сортировки остаётся значимым
Сравнение типизированных Pivot, slicer и шкал времени разрешает поддерживаемые локальные источники листов и не-OLAP привязки без обновления или оценки доступности; нативные подсказки доступности slicer — производные отображаемые метаданные, тогда как выборы членов и распознанные нативные метаданные сортировки сравниваются
Непрозрачные нативные свойства рисования, неполные бинарные модели Pivot, внешние или OLAP источники Pivot, сырые дополнительные записи сводных таблиц и XML расширений, неизвестный XML фильтров, а также немоделированные атрибуты или дочерние элементы расширений slicer или шкал времени возбуждают EXLSSemanticSnapshot; сохранение таких данных не подразумевает семантической эквивалентности
Выбранные импортированные функции сводных таблиц и кэшей также валидируют сохранённый нативный XML перед сравнением типизированной проекции, включая вложенные метаданные полей и записи кэшей; неизвестные пространства имён, атрибуты, дочерние элементы и полезные нагрузки расширений явно не проходят в тех же кооперативных лимитах функций, при этом смоделированные привязки кэшей slicer остаются поддерживаемыми
TSimpleDomNode.RawName открывает исходный QName элемента рядом с нормализованным читателем Name, позволяя чувствительный к пространствам имён осмотр без изменения существующего сопоставления имён парсера
Настройки книги и непрозрачные метаданные пакета остаются вне сравнения; сравнение базовых стилей не оценивает внешний вид условного форматирования или стилей таблиц, а сравнение рисунков сохраняет поддерживаемые границы изображений, текстовых полей, диаграмм и упорядоченных групп семантического снимка
Эффективные свойства rich text
TMsoFbtOpt.StoredPids возвращает сохранённые идентификаторы свойств OfficeArt в отсортированном порядке, а TMsoFbtSp.PersistentFlags открывает нативные флаги фигур без выделения свойств или якорей
TMsoShapeContainer.HasPreservedObjectData идентифицирует удерживаемые хвостовые байты OBJ; HasOrdinaryEmbeddedPictureObjectData проверяет, что хвосты изображений содержат только распознанные записи формата буфера обмена и нулевые флаги изображения, и отклоняет связанные или неизвестные записи без копирования полезной нагрузки
TMSOShapeTextBox.HasValidTextRuns проверяет сохранённые границы прогонов TXO и зарезервированные поля без создания прогонов; TMsoDrawing.HasUnmodeledAppearance идентифицирует нативные данные рисования, пропущенные типизированным парсером, позволяя захвату явно отклонять неразрешённый внешний вид
TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSetи ColorSet отличают унаследованные свойства шрифта от явных переопределений, включая ложные флаги, none, baseline и автоматические цвета; сеттеры помечают свойство явным, даже когда его значение равно начальному значению по умолчанию нового прогона
TXLSXRichText.HasUnsupportedAppearance сообщает о нативных rich-свойствах, которые типизированная модель прогонов не может представить; переносимый захват и эффективное сравнение rich text явно отклоняют такие прогоны, тогда как поддерживаемые свойства общих/встроенных прогонов и пробельные символы сохраняют импортированную семантику
Эффективное сравнение rich text применяет явные переопределения false до объединения соседних одинаковых прогонов; унаследованные и явно очищенные свойства остаются различными при дедупликации shared strings и поддерживаемых круговых преобразованиях XML
TXMLReader.ResolveNamespaceUri(Prefix, Uri) разрешает текущую действующую привязку пространства имён, не меняя позицию читателя, и возвращает false, когда привязки нет; пустой префикс запрашивает пространство имён по умолчанию, а сырые QName остаются доступны для чувствительного к пространствам имён осмотра
Неизменяемые записи rich/сцены, расширение источника захвата и контракт передачи HXRSNP02 описаны на странице Portable headless output
Отсоединённый осмотр стилей и осей
TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) возвращает отсоединённый TXLSSemanticCellStyle для допустимых координат с отсчётом от единицы, разрешая сохранённые и упакованные стили, значения листа по умолчанию, применимые наложения стилей, неявные форматы дат, индексированные цвета и цвета тем без материализации ячеек или изменения пулов стилей; публичный вызов получает аренду чтения и исключает правила условного форматирования и стилей таблиц
TXLSXWorksheet.GetStoredAxisSpans(IsRow) возвращает TXLSXAxisSpans — массив записей TXLSXAxisSpan с инклюзивными FirstIndexи LastIndex с отсчётом от единицы; он сообщает следы метаданных размера, скрытия, структуры и свёрнутости, сохраняет компактные интервалы высот повторяющихся строк и оставляет эффективное значение листа по умолчанию доступным через его обычные свойства
Возвращённые интервалы описывают следы сохранённых метаданных, а не непересекающееся нормализованное разбиение; приложения, сравнивающие две оси, могут объединить их первые и последние границы, а затем осмотреть эффективное состояние один раз для каждого получившегося интервала
TXLSXWorksheet.GetStoredStyleRegions возвращает отсоединённые TXLSXStyleRegions, содержащие инклюзивные границы FirstRow, FirstCol, LastRowи LastCol для компактных следов виртуального форматирования; эти следы могут перекрываться, а вызывающий код читает их эффективный внешний вид через ReadSemanticCellStyle
TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) возвращает отсоединённые записи TXLSXSemanticFeatures со стабильным Key, каноническими байтами Definitionи сосчитанным ItemCount; необязательные положительные лимиты по умолчанию равны 64 МиБ и 1,000,000 записей
TXLSXSemanticFeatureKind содержит xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelinesи xlsxSemanticTimelineCaches
Определённые имена и три вида кэшей используют область действия всей книги и допускают nil-лист; остальные виды требуют лист, принадлежащий книге, правила и рисунки сохраняют свою сохранённую последовательность, а возвращаемые массивы и буферы — принадлежащие вызывающему коду копии; эти читатели получают аренды чтения и наследуют типизированное покрытие и явное поведение для неподдерживаемых данных, описанное выше
TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) возвращает отсоединённые канонические байты прогонов для координат с отсчётом от единицы или пустой буфер, когда rich text нет и IncludePlainText ложно; необязательный ConsumedItems: PInteger получает количество захваченных прогонов, а захват обычного текста сохраняет упакованное хранилище
TXLSPivotCacheField.GroupItemTypes[Index] открывает типизированный вид, соответствующий GroupItemLabels[Index], и отклоняет индекс вне сохранённого домена сгруппированных подписей
Метаданные формул и callback запросов Pivot
TXLSGetCellFormulaText и TXLSCalculator.OnGetCellFormulaText читают сохранённый текст выражений с однобазовым SheetIndex и базирующимися на нуле Row/Col, возвращая lxOk или типизированный код ошибки и соблюдая защиту от скрытия формул; TXLSGetPivotTable и OnGetPivotTable находят заимствованную таблицу по однобазовому SheetIndex и базирующимся на нуле координатам диапазона
Движки книг подключают эти необязательные callback в обычном, read-only и изолированном контекстах вычислений; callback не пересчитывают цели, не обновляют источники Pivot и не передают владение
TXLSPivotDataConstraint хранит FieldName и типизированный Item, при этом TXLSPivotDataConstraints собирает пары поле/элемент; TXLSPivotTable.GetDataValue запрашивает один видимый поддерживаемый агрегат из отсоединённого снимка локальной таблицы/кэша, а IntersectsQueryRange использует однобазовые границы листа, включая смоделированные ячейки фильтра отчёта
TlxPivotQueryBudget синхронно получает оценки работы и памяти и возвращает, может ли вычисление продолжаться; EXLSPivotQueryBudget и EXLSPivotQueryUnsupported отличают исчерпанные лимиты от неподдерживаемых моделей кэша или агрегатов
TXLSPivotCache.QueryModelIsComplete фиксирует готовность декодированного запроса независимо от полноты сырого воспроизведения BIFF; QueryRecordsValid открывает валидность импортированных записей, а SetQueryRecordValidity применяет приоритет читателя формата, не обновляя записи
Явные байты кодовых страниц
| Член | Контракт |
|---|---|
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1) | Возвращает RawByteString с точными байтами в явно заданной ненулевой байтово-ориентированной странице, сохраняет встроенные нули, проверяет круговую идентичность Unicode и возбуждает EConvertError для непредставимого текста; неотрицательный MaxBytes сохраняет самый длинный полный символьный префикс, который помещается, а -1 оставляет длину неограниченной; валидация покрывает исходный текст до усечения |
XlsDecodeCodePage(Bytes, CodePage) | Возвращает WideString из явной байтовой кодировки и сохраняет встроенные нули; некорректные байтовые последовательности следуют поведению установленного декодера; страница 0 и UTF-16 страница 1200 отклоняются, потому что этот API не выводит ANSI-локаль и не обрабатывает байтовый поток UTF-16 |
TXLSBlob.GetCompressedUnicodeString(Index, Count) | Возвращает точные кодовые единицы сжатого Unicode BIFF8 от U+0000 до U+00FF, сохраняет встроенные нули, проверяет запрошенный байтовый диапазон и не интерпретирует эти байты через кодовую страницу |
TXLSBlob.AddRawString | Добавляет точные закодированные байты без преобразования кодовой страницы AnsiString и обновляет DataLength; пустой вход не добавляет байтов |
TXLSCalculator.CodePage, TXLSFormula.FCodePage | Выбирают явную устаревшую байтовую кодировку формул, по умолчанию CP1252; владеющая классическая книга синхронизирует свой калькулятор при инициализации или при вызове SetCodePage |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | Необязательный аргумент CodePage по умолчанию 1252 и кодирует текст BIFF5; вывод BIFF8 остаётся в Unicode |
TMsoDrawing.StoreNotes | Необязательный аргумент CodePage по умолчанию 1252 и кодирует текст примечаний до Unicode; существующий лимит размера записи обычных примечаний BIFF5 сохраняется; это не добавляет поля автора, rich-text или геометрии, отсутствующие в том формате записи |
TXLSCustomName.SetSourceData | Необязательные аргументы FileFormat и CodePage идентифицируют импортированные сырые байты NAME и по умолчанию равны xlExcel97 и 1252; сырые записи переиспользуются, только когда их формат и устаревшая кодировка совпадают с запрошенным выводом |
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData | Необязательный аргумент ACodePage по умолчанию 1252; размер и вывод устаревших строковых массивов используют одинаковое количество закодированных байтов, тогда как строки BIFF8 остаются в Unicode |
Передавайте возвращённый RawByteString напрямую в AddRawString или байтово-ориентированную операцию с потоком; преобразование его в AnsiString по умолчанию может перекодировать его байты на нативных системах FPC
Классические определённые имена и блоки формул массива
TXLSCustomName deferred compilation | ClearDefinition освобождает скомпилированный AST свойства RefersTo, сохраняя строку определения и любые сырые импортированные байты NAME, Compile заново строит AST из сохранённого определения и сообщает успех, а GetCompiledFormula перекомпилирует автоматически, поэтому очищенное имя разрешается заново при следующем чтении; PeekCompiledFormula возвращает текущий AST, не запуская эту перекомпиляцию, а StoredDefinition открывает неразобранный источник определения |
TXLSCustomName identity and flags | StoreIndex открывает позицию хранения имени в его коллекции, NameID — уникальную числовую идентичность книги, используемую движком вычислений, а IsHidden и IsMacro читают и пишут флаги hidden и macro записи NAME BIFF |
TXLSFormulatArray.RowsCount, ColsCount | Сообщают размеры строк и столбцов разобранного блока формулы массива; оба начинаются с единицы и ограничивают домен элементов на ячейку, переносимый методами вывода |
Классические пулы шрифтов, форматов и стилей
TXLSFontList stored font attributes | Индексированные свойства зеркалируют сохранённый ключ шрифта по индексу списка с отсчётом от нуля: Name, Size, ColorIndex, Bold, Italic, Strikethroughи Underline присоединяются к OutLineFont, Shadow, SubScript, SuperScript, Familyи CharSet для read-only осмотра |
TXLSNumFormatList.AddValue, FmtExists | AddValue регистрирует строку формата и возвращает её индекс, отображая написания встроенных форматов на их канонические id и помечая форматы дат и времени; FmtExists сообщает, зарегистрирована ли уже пользовательская строка формата |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat сообщает, помечен ли формат, сохранённый по индексу, как формат даты или времени, тогда как IsDateFormatValue напрямую проверяет строку формата на токены дат и времени |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle регистрирует именованный пользовательский стиль ячейки, привязанный к индексу записи XF, а AddBuiltinStyle регистрирует встроенный стиль ячейки по его встроенному id вместе с уровнем структуры, используемым стилями уровней строк и столбцов |
TXLSStyles.BuiltinStyleName | Функция класса, возвращающая каноническое отображаемое имя встроенного стиля ячейки Excel для встроенных id от 0 до 53; идентификаторы вне диапазона возвращают пустое имя, чтобы писатели возвращались к сырой форме builtin-байтов |
Вспомогательные средства пакета и двоичного хранилища
TXLSXOpaquePackage | LoadWorkbookXmlMetadata захватывает состояние XML уровня книги, MarkAllPartsClean сбрасывает флаги изменённости, а WorkbookExtLstXml вместе с WorkbookRootAttributesXml открывают сохранённые фрагменты XML книги; IsDiscardedPart сообщает, было ли имя части удалено операцией отбрасывания, например очисткой веб-надстроек |
TXLSFileStorage | Load, LoadFolder, Writeи WriteFolder передают содержимое составного файла; Child и Count перечисляют дочерние записи, каждая из которых — TXLSFileItem , именованный узел хранилища, чей подкласс TXLSFileStream несёт сохранённые байты в виде TXLSBlob , где DataSize сообщает длину полезной нагрузки |
TXLSBlob | Add добавляет другой блоб, а AddByte, AddWord, AddLong, AddDouble, AddStringи AddWideString добавляют типизированные значения; CopyData, CopyMem, FillByte, Write, Clear, Resetи Dump управляют содержимым; Buff и DataLength открывают хранилище |
TXLSBlobList | Append, AppendList, CopyDataи Write объединяют или выводят записи; Entries и TotalSize открывают состояние списка |
TXLSWideStringBuilder | AddString добавляет текст, а Length сообщает накопленное количество символов |
Дополнения для рисования и средства просмотра книг
TXLSFillFormat | PictureFill настраивает заливку фигуры на основе изображения, а FillType выбирает вид заливки (сплошная, градиентная, изображение или предустановленная текстура), который создаёт писатель |
TXLSShapes | AddScrollBar и AddSpinner создают элементы управления форм — возвращённые объекты TXLSScrollBar и TXLSSpinner открывают геометрию элемента управления и связанную ячейку, а счётчик добавляет пределы шага Min, Maxи Inc ; RegisterScrollBar и RegisterSpinner регистрируют элементы управления, загруженные из книги |
TXLSWorkbookViewer | CanUndo и CanRedo сообщают о доступности истории транзакций; ClearSelectedRange, CopySelectedRange, PasteSelectedRangeи PasteText работают с выделенным диапазоном, а ReferencePickMode включает интерактивный выбор ссылки на ячейку или диапазон |
TXLSWorkbookEditHistory | Headless-движок транзакций содержимого в lxWorkbookViewer привязывает заимствованную классическую или XLSX книгу и предоставляет preflight защиты диапазона, копирование и вставку Unicode-текста, очистку диапазона и одну транзакцию отмены/повтора на операцию; см. транзакции headless-редактирования |
TXLSCellContentSnapshot | Оба класса листов открывают ReadCellContent(Row, Col) и RestoreCellContent(Snapshot) для отсоединённого захвата и восстановления нативного содержимого по однобазовым координатам в исходном листе; захват не вычисляет формулы, не создаёт отсутствующие ячейки и не материализует упакованное хранилище, а неизменяемая полезная нагрузка NativeData сохраняет rich text, кэши формул и стиль ячейки; прямое восстановление — низкоуровневая операция, чей вызывающий код должен сам проверить защиту и структурные границы |
Разбивка на страницы, вывод изображений и печать
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | Выполняют preflight метаданных кэшированной диаграммы без разрешения ячеек и записывают ограниченные векторные и текстовые примитивы для отсоединённой диаграммы в lxPortableChart, возвращая TXLSPortableSceneObjects и учёт элементов, байтов и текста; точки входа lxPagination сохраняют ту же общую реализацию для существующих вызывающих кодов Windows; текущее подмножество покрывает обычные диаграммы столбцов, гистограммы, линии, рассеяния, круговые, кольцевые и односерийные области с одной основной группой построения, а запись требует валидированных нативных метаданных, конечных строго упорядоченных точек кэша и неподключённой модели диаграммы; см. запись кэшированных диаграмм |
TXLSGraphicsBackend | DrawTiledImage рисует фон листа повторно по обрезанной области страницы |
TXLSPaginationModel | CompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBordersи PaintPageBackground управляют содержимым страниц; RenderDPI, RenderColorModeи RenderSession открывают разрешение вывода, обработку цвета и активную сессию отрисовки |
TXLSCellImageExporter | Measure вычисляет размеры в пикселях для диапазонов классического формата или XLSX; ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPaintи PaginationModel настраивают отрисовку и наблюдают за ней |
TXLSPageImageExporter | BeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColorи TransparentBackground применяют те же перехватчики отрисовки и ограничения безопасности вывода к экспорту постраничных изображений |
TXLSPrintDocument | PrintWorksheet, PrintWorkbookи PrintAllVisibleSheets отправляют содержимое классического формата или XLSX на принтер VCL; FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPageи OnAfterGeneratePage управляют заданием печати |
Модели классических диаграмм и объекты диаграмм на листе
TXLSXChartSeries | LineVisible, LineColorRGBи LineWidthPoints описывают обводку независимого ряда; LineStyleSet, LineColorSetи LineWidthSet сохраняют явные настройки, а EffectiveLineVisible разрешает устаревшее соглашение «только заливка»; MarkerFillSet и MarkerBorderSet отличают явный чёрный от автоматических цветов маркеров, при этом переносимая запись линий и рассеяния поддерживает диаметры окружностей от 2 до 72 пунктов; сеттеры цвета и ширины проверяют значения до изменения и соблюдают аренды чтения книги |
TXLSChartSeries | AddTrendline и AddErrorBars создают типизированные аннотации ряда, а TrendlineCount и ErrorBarCount сообщают размеры их коллекций; существующее поле MarkerSize сохраняет сырые twips BIFF, тогда как read-only геттер MarkerSizePoints возвращает это значение, делённое на 20, включая дробные размеры в пунктах |
TXLSChartAxis | HasAxcExtFlag проверяет один необработанный флаг AXCEXT, не требуя от вызывающего кода разбора битовой маски |
TXLSChartModel | AxisGroupCount сообщает число основных и дополнительных групп осей, декодированных из диаграммы |
TXLSCustomChart | AddAreaData добавляет готовый элемент области для перепривязки формул при сохранении, а ApplyDateAxisModel применяет типизированную модель оси дат к необработанным записям диаграммы; GetStoredRecordInfo читает идентификатор записи с отсчётом от нуля и количество байтов без выделения, а ReadStoredRecord(Index, MaxBytes) проверяет лимит байтов, прежде чем вернуть отсоединённые байты в TXLSChartStoredRecord, без вычисления формул или изменения кэшей |
TXLSWorksheet | AddChartObject привязывает рамку диаграммы к листу и соединяет её с общим построителем диаграмм |
TXLSXChartLayoutResolver | TryResolve разрешает один прямоугольник компоновки с необязательной проверкой размеров, а ResolveChart вычисляет прямоугольники диаграммы, заголовка, легенды, области построения и осей |
Типизированная модель декодирования диаграмм
Декодированное состояние диаграммы открывается как обычные записи и перечисления, чтобы код осмотра никогда не разбирал необработанные записи BIFF вручную: TXLSChartInfo несёт сводку декодированной диаграммы с TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble), каждый ряд сообщает TXLSChartSeriesType, а TXLSChart3DState вместе с TXLSChart3DInfo описывают трёхмерные виды. TXLSChartAxisType (catCategory, catValue, catSeries, catDate) и TXLSChartLegendPosition классифицируют оси и легенды, а модель оси дат использует TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears) и TXLSChartDateValues. TXLSCustomChart открывает декодированную модель через TXLSChartInfo; аннотации линий тренда и планок погрешностей — типизированные объекты (TXLSChartTrendline, TXLSChartErrorBars), доступные от каждого ряда
Записи создания диаграмм
Создание листов диаграмм и работа через построитель принимают обычные записи вместо графов объектов: TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfoи TXLSChartSeriesStyleInfo заполняют элементы рядов, передаваемые в TXLSWorksheets.AddChartSheet и общий построитель диаграмм, а TXLSPivotChartInfo описывает обрамление сводной диаграммы, используемое, когда диаграмма привязывается к сводной таблице
Осмотр заливки классических диаграмм
TXLSCustomChart.GetChartModel декодирует поддерживаемые нативные таблицы свойств OfficeArt и третичные таблицы свойств в записях GelFrame, включая свойства после записей со сложными полезными нагрузками; существующее представление построителя остаётся поддерживаемым, а некорректные границы таблиц оставляют прежнюю типизированную заливку неизменной и сообщают о неподдерживаемой записи
Осмотр диаграмм валидирует полный сохранённый текст и полезную нагрузку аннотаций до добавления типизированного состояния: усечённые имена линий тренда или разделители подписей данных сообщают идентификатор своей записи через _UnsupportedSemanticRecordID, тогда как nil или слишком маленькие заголовки SeriesText сообщают эту запись как неподдерживаемую и для BIFF5, и для BIFF8; объявленная протяжённость текста ряда, превышающая его полезную нагрузку, возбуждает EReadError, освобождает частичную модель и оставляет сохранённые записи диаграммы неизменными
Геттер маркеров и осмотр заливки сохраняют сырое хранилище диаграммы; путь захвата заявленного внешнего вида отдельно валидирует поддерживаемые основные диаграммы, тогда как непроверенные контрольные суммы расширений rich-заголовков или фигур остаются неподдерживаемыми
Ограниченные читатели сохранённых диаграмм, строк и шрифтов
TXLSChartStoredBytes — отсоединённый байтовый массив, а TXLSChartStoredRecord содержит RecordIdи Data; эти читатели осматривают удерживаемое исходное хранилище, не создавая декодированную модель диаграммы и не вычисляя формулы
| TXLSCustomChart.GetStoredRecordInfo | Возвращает идентификатор записи и сосчитанную длину в байтах для индекса записи с отсчётом от нуля, не копируя её полезную нагрузку |
| TXLSCustomChart.ReadStoredRecord | Копирует одну полезную нагрузку после проверки индекса и неотрицательного MaxBytes; лимит байтов по умолчанию — High(Int64) |
| TXLSCustomChart.ReadStoredFormulaLeafInfo | Осматривает связный сохранённый лист BRAI, используя точный исходный калькулятор и неотрицательные квоты байтов и текста; чужие калькуляторы или владельцы трансляции возвращают неподдерживаемый лист, а AllowUnboundBiff по умолчанию False |
| TXLSCustomChart.ReadStoredFormulaLiteral | Возвращает отсоединённый литерал только после тех же проверок происхождения и квот; неподдерживаемый лист возбуждает EInvalidOperation |
| TXLSCustomChart.SourceBiffVersion, SourceCodePage | Read-only происхождение удерживаемых записей диаграммы |
| TXLSStringTable.GetStoredStringLength, ReadStoredString | Считает существующее хранилище UTF-16, используя однобазовую идентичность строки таблицы, затем копирует только когда неотрицательная квота символов это покрывает; недопустимые идентичности и неполное хранилище UTF-16 отклоняются |
| TXLSFontList.GetStoredNameLength, ReadStoredName | Проверяет сохранённый ключ шрифта по базирующемуся на нуле индексу списка перед подсчётом или копированием его имени под неотрицательной квотой символов |
| TMsoFbtOptItem.HasStoredUnicodeString | Проверяет ограниченные сохранённые метаданные сложных Unicode-строк без материализации строки |
| TMsoShapeContainer.HasOrdinaryChartObjectData | Проверяет сохранённый тип объекта диаграммы, ненулевую идентичность объекта, поддерживаемые флаги и отсутствие неизвестных хвостовых данных объекта |
Обслуживание таблицы общих строк и вывод SST
TXLSStringTable в lxStringTable поддерживает общие строки классической книги; члены ниже покрывают регистрацию на стороне читателя, обслуживание слотов и сырой вывод SST для сохранений с полным roundtrip
KeyExists, AddWithExtras | KeyExists сообщает, занимает ли строка уже слот; AddWithExtras — компаньон Add на стороне читателя, который присоединяет сырые полезные нагрузки rich-text rgRun и фонетические rgExtRst к записи, не увеличивая её счётчик ссылок, потому что каждая ссылающаяся ячейка позже восстанавливает счётчик через обычный путь добавления |
Replace, ReplaceIndex | Replace сбрасывает одну ссылку в старом слоте, освобождая его, когда счётчик достигает нуля, и заново добавляет текст, возвращая получившийся слот; ReplaceIndex перемещает одну ссылку из старого слота в новый без копирования текста |
AddSSTData, InitExtIndex | AddSSTData выводит сырую полезную нагрузку SST в список блобов писателя; перегрузка, принимающая таблицу ремапа шрифтовых прогонов, переписывает индекс шрифта каждого FormatRun на выходе ([MS-XLS] §2.5.129), поэтому rich-прогоны следуют переупорядочению шрифтов при сохранении, тогда как пустая таблица сохраняет устаревший дословный вывод, а InitExtIndex нумерует корзины ExtSST по живым слотам перед выводом |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount — верхняя граница итерации слотов с отсчётом от единицы, при этом удалённые слоты читаются как пустые, ExtIndex разрешает слот в номер его корзины ExtSST или -1 для неживого слота, ParsedExtSSTDsst и ParsedExtSSTItemCount удерживают импортированные значения заголовков EXT/SST, а BiffSizeLimit ограничивает каждый выводимый блок записи — классический писатель устанавливает его в 2080 байтов для BIFF5 и 8224 для BIFF8 |
Вложения PDF, подписи и экспорт HTML
IXLSPDFAttachmentSource | WriteTo передаёт байты вложения в экспорт PDF потоком, не требуя, чтобы экспортёр владел исходными данными |
TXLSPDFExport | AttachmentDuplicatePolicy выбирает обработку дубликатов имён, AttachmentSpoolThreshold управляет буферизацией вложений, а DocumentLanguage записывает метаданные языка документа |
TXLSPDFSignature | TextAlign, TextSize, TextColor, TextBoldи TextItalic настраивают видимый образ подписи |
TXLSHTMLExport | ViewMode (тип TXLSHtmlViewMode: текущий вид или полная таблица электронной таблицы) выбирает представление HTML, а HotTrackTargets (набор TXLSHtmlHotTrackTarget) и HotTrackColor настраивают интерактивную подсветку ячеек и объектов |
TXLSXHtmlExportOptions | ViewMode, HotTrackTargetsи HotTrackColor предоставляют эквивалентные элементы управления экспорта XLSX в HTML |
Аудит вычислений и элементы управления книги
TXLSCalculationAuditReport | Truncated сообщает об усечении по лимиту проблем, StackTruncated — об усечении кадров стека вызовов, а Issues индексирует записанные проблемы вычисления |
TXLSUserFunctionRegistry | Generation меняется при каждом изменении набора зарегистрированных пользовательских функций, позволяя инвалидировать кэшированные привязки формул |
EXLSReportRecoverableData | Category идентифицирует категорию восстанавливаемых данных отчёта, передаваемую вызывающему коду |
IXLSWorkBook | ManualCalculationThreadCount ограничивает число рабочих потоков, используемых ручным вычислением |
TXLSXDataValidation | HasUnknownImeMode сообщает значение режима IME, которое HotXLS сохранил, но не распознал |
TXLSXTable | ColumnCalculatedFormulaArrayRaw и ColumnTotalsFormulaArrayRaw открывают исходный текст формул массива для столбцов таблицы |
Совместимость устаревшего обрамления PivotCache
TXLSPivotCache | RawBucketIndex идентифицирует позицию исходного подпотока, RawFramingIsLegacy распознаёт старое обрамление HotXLS, RawModelIsComplete сообщает, представляет ли типизированная модель каждую запись, а CanUpgradeFraming — безопасно ли явное типизированное переформирование |
TXLSPivotCache | StreamId открывает идентификацию потока классического кэша, SourceDataType — тип классических исходных данных, а RawHasStorageStream сообщает, получен ли загруженный кэш из независимого потока хранилища PivotCache |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming явно включает перезапись только устаревших обрамлений кэша HotXLS с полной типизированной моделью; обычное воспроизведение необработанного кэша остаётся поведением по умолчанию |
StreamId записывается как запись SXStreamID ([MS-XLS] §2.4.303) и повторяется как поле SXDB заголовка idstm , которое должно ему равняться; SourceDataType записывается как запись SXVS ([MS-XLS] §2.4.317: $0001 — лист, $0002 — внешняя, $0004 — консолидация, $0010 — сценарий) и повторяется как поле SXDB заголовка vsType , которое должно ему равняться. Кэши, построенные по диапазону листа, начинаются с типа «лист», а кэши, прочитанные из файла, сохраняют значение, которое нёс их подпоток, поэтому BIFF-писатель никогда не оставляет в поле SXDB имя записи, которую он не записывал; RawHasStorageStream помечает кэш, загруженный из собственного потока хранилища, общекнижный дескриптор которого предшествует кэшированным записям
Интеграция с буфером обмена и параметры вставки
TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;
function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
const Text: WideString; const Html: AnsiString = ''): Boolean;
PasteFromClipboard обоих фасадов: xlpoValuesOnly сохраняет кэшированные значения ячеек с формулами и пропускает форматы и объединения, а xlpoInsertRows и xlpoInsertCols сдвигают существующее содержимое, прежде чем блок займёт своё местоCF_UNICODETEXT (с fallback на CF_TEXT через текущую кодовую страницу ANSI), XLSSetClipboardTextAndHtml одной транзакцией записывает текст и полезную нагрузку HTML Format в стилизованном виде, XLSBuildHtmlClipboard вычисляет байтовые смещения CF_HTML для документа или фрагмента, а XLSEncodeClipboardField экранирует одно поле с разделителем-табуляцией. XLSParseClipboardGrid разбирает текст буфера обмена как строки с табуляцией с тем же определением типов, которое TXLSCSVLoader применяет к CSV, XLSParseXmlSpreadsheet прогоняет тот же загрузчик по полезной нагрузке SpreadsheetML 2003, полученной через XLSGetClipboardXmlSpreadsheet, а помощники Biff8 обнаруживают и читают собственный поток, который Excel сам кладёт в буфер обмена, поэтому вставляемые данные сохраняют значения, формулы и форматирование без потери текстаXLSReadClipboardPasteData захватывает поток Biff8 и текст Unicode под одной блокировкой буфера обмена, поэтому вставке не нужно заново открывать буфер между двумя чтениями и ни один из форматов не уходит конкуренту, параллельно держащему буфер. XLSSetClipboardBiff8 — зеркальная сторона записи: одной транзакцией она кладёт поток составного файла BIFF8, текст Unicode с разделителями-табуляциями и опциональную полезную нагрузку CF_HTML — передайте пустой Text или Html, чтобы пропустить любой из сопутствующих форматов, при этом часть Biff8 обязательнаРазрешение отображаемого текста ячейки
TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
xcdmSuppressedZero);
TXLSCellDisplayOptions = record
ShowFormulas: Boolean;
ShowZeros: Boolean;
SheetProtected: Boolean;
FormulaWidthFactor: Double;
DateSerialZero: Double;
end;
TXLSCellDisplayInput = record
HasFormula: Boolean;
FormulaHidden: Boolean;
IsNumericZero: Boolean;
FormulaText: WideString;
FormattedText: WideString;
end;
TXLSCellDisplayResult = record
Mode: TXLSCellDisplayMode;
Text: WideString;
TreatAsText: Boolean;
EffectiveWidthFactor: Double;
end;
function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
XLSResolveCellDisplay напрямую со своими входными записями; XLSDefaultCellDisplayOptions возвращает канонические значения по умолчанию, а XLSNormalizeFormulaDisplayText нормализует строку формулы для отображенияОбъекты классической проверки данных
TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);
TDVRange = class; { one validation rule over one or more ranges }
TDVRangeList = class; { the per-sheet rule collection }
TDataValidator = class; { engine that checks edits against the rules }
TXLSWorksheet.Add*Validation создают правила TDVRange в TDVRangeListлиста; каждое правило несёт свой TXLSDataValidationType, границы, сообщения ввода и ошибки, а также TXLSDvErrorStyle. TDataValidator проверяет правку по правилам и сообщает, допустимо ли значение, — это та же проверка, что стоит за собственными подсказками проверки ExcelСканирование и разрешение индексированных цветов
TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);
TXLSIndexedColorResolution = record
Kind: TXLSIndexedColorKind;
RawIndex: Int64;
PaletteSlot: Integer;
SystemColorRole: TXLSSystemColorRole;
ARGB: LongWord;
HasResolvedColor: Boolean;
end;
TXLSNearestIndexedColorMatch = record
InputARGB: LongWord;
ColorIndex: Integer;
PaletteSlot: Integer;
ARGB: LongWord;
DistanceSquared: Double;
ExactMatch: Boolean;
end;
TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
ResolveIndexedColor, NearestIndexedColorи ScanIndexedColorUsage : разрешение сообщает, из какого из четырёх источников TXLSIndexedColorKind пришёл индексированный токен, вместе со слотом палитры, ролью системного цвета и нормализованным ARGB; ближайшее совпадение добавляет квадрат расстояния RGB и флаг точного совпадения, а сканирование использования помечает каждую категорию потребителя, блокирующую слот палитры. Библиотека держит внутренний кэш TXLSIndexedColorMatcher с ключом по поколению палитры — FindNearest отвечает из него на запросы ближайшего цвета, а UpdateSlot правит один слот палитры, — поэтому повторные разрешения обходятся без выделения памятиВспомогательные функции ссылок A1
function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
False для некорректного ввода вместо исключения