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

Ячейки и диапазоны

Типичная задача при работе с HotXLS — указать ячейку или диапазон ячеек, а затем выполнить с ними какое-либо действие, например ввести значение или изменить формат
Объект Range в HotXLS может представлять как одну ячейку, так и диапазон ячеек. В следующих разделах описаны наиболее распространённые способы идентификации объектов Range и работы с ними
 
»Нотация A1 для ячеек и диапазонов
»Индексные номера ячеек
»Индексные номера диапазонов
»Ссылки на строки
»Ссылки на столбцы
»Смещение Offset диапазонов

Ограниченный осмотр сохранённых ячеек диаграмм Classic

TXLSWorksheet.ReadCachedChartCell(Row, Col, MaxBytes, MaxTextCharacters) читает координаты Classic XLS с отсчётом от нуля, не создавая ячеек, не вычисляя формулы, не клонируя скомпилированные формулы, не прогревая кэш shared strings и не меняя поколение книги

Возвращаемый TXLSCachedChartCell содержит Kind: TXLSCachedChartCellKind, Number: Double, Text: WideString, ReadBytes: Int64, TextCharacters: Int64, Generation: UInt64 и CacheState: TXLSFormulaCacheState; ccckAbsent обозначает отсутствующее или пустое содержимое и не-якорные ячейки объединений, ccckNumber — конечный числовой результат, а ccckText содержит отсоединённую строку UTF-16 со счётчиком

Ячейкам с формулами нужен сохранённый кэш xlfcsLoaded или xlfcsCalculated; отсутствующие или инвалидированные кэши возбуждают EInvalidOperation вместо вычисления формулы, а сохранённые пустые или нулевые кэши возвращают ccckAbsent

Длина shared string и длина кэшированного varUString или varOleStr проверяются до копирования с сохранением встроенных NUL-символов и суррогатных кодовых единиц; массивы, варианты по ссылке, ошибки, Boolean-значения, ANSI-кэши varString и неизвестные типы кэшей явно не поддерживаются

Текстовый результат из n кодовых единиц UTF-16 добавляет ReadBytes = 4*n и TextCharacters = 2*n за источник со счётчиком и отсоединённый вывод; число добавляет восемь байтов и ни одной текстовой единицы, а отсутствие не добавляет ничего

Метод отклоняет отрицательные лимиты с EArgumentOutOfRangeException, координаты вне строк от 0 до 65535 или столбцов от 0 до 255 — с ERangeError, а превышенные лимиты или нефинитные значения — с EInvalidOperation; вызывающий код должен дополнительно учесть любое числовое форматирование или копируемый текст категории, порождаемые из возвращённого значения

Сохранённые календарные даты и типизированные кэши формул varDate следуют текущей настройке Date1904 книги, тогда как обычные числовые double сохраняют своё точное сохранённое значение; сохранённая календарная дата в фантомном интервале 1900 года [60, 61) отклоняется, а не трактуется как настоящая дата

TXLSWorksheet.IsCachedChartCellVisible(Row, Col) использует те же границы координат с отсчётом от нуля и читает сохранённые флаги скрытия строк и столбцов без материализации; захват диаграммы, требующий построения только видимых данных, должен проверять этот результат и применять свою документированную политику работы со скрытыми данными

Оба метода получают вложенную аренду чтения книги; источник диаграммы из нескольких ячеек должен удерживать внешнюю аренду, проверять возвращённое Generation, разрешать ссылки формул относительно точной заимствованной книги и локального листа без внешних или пересекающих ссылок, а также проверять границы ссылок и происхождение формул перед использованием этих значений

Встроенные изображения и Checkbox в XLSX

TXLSXCell.SetInCellImage(Data, ContentType, AltText, Decorative) сохраняет локальный PNG или JPEG как содержимое ячейки — с копией закодированных байтов и графом метаданных rich value в пакете XLSX

Сеттер проверяет границы чанков PNG, контрольные суммы и конечный маркер либо маркеры кадров и контейнера JPEG, прежде чем менять ячейку; растровое декодирование остаётся обязанностью отрисовчика

ContentType — это image/png или image/jpeg, Decorative по умолчанию False, а AltText сохраняется как метаданные изображения

SetInCellImage заменяет формулу, кэшированное содержимое и rich text, отклоняет ячейки с формулами массива и использует #VALUE! как обычное запасное значение ячейки; библиотека не вычисляет функцию IMAGE и не скачивает удалённые изображения

InCellImage возвращает отсоединённый TXLSInCellImageSnapshot с Availability: TXLSCellFeatureAvailability, Data, ContentType, AltText, Decorative и CalcOrigin; xlcfaAbsent означает отсутствие метаданных изображения, xlcfaSupported — разрешённый локальный PNG или JPEG, а xlcfaUnsupported — что существующие метаданные нельзя безопасно интерпретировать

ClearInCellImage удаляет изображение и очищает его запасное значение; присвоение другого значения или формулы удаляет изображение как часть замены содержимого ячейки

TXLSXCell.SetCheckbox(DefaultState: TXLSCheckboxDefaultState) создаёт формат cell-control и инициализирует значение — xlcdUnchecked, xlcdChecked или xlcdBlank; по умолчанию xlcdUnchecked

CellControl возвращает TXLSCellControlSnapshot с Kind: TXLSCellControlKind, DefaultState и базовым Value; виды — xlcctNone, xlcctUnknown и xlcctCheckbox

Формат Checkbox принадлежит форматированию, поэтому присвоения значения или формулы его сохраняют, а Range.Clear очищает содержимое, сохраняя формат; ClearCellControl удаляет этот формат с сохранением значения, а Range.ClearAll удаляет и то и другое

TXLSXWorksheet.ReadInCellImage(Row, Col, MaxBytes) и TXLSXWorksheet.ReadCellControl(Row, Col) читают координаты с отсчётом от единицы под арендой чтения, не создавая отсутствующие ячейки и не пересчитывая формулы; MaxBytes по умолчанию High(Int64) и отклоняет слишком большое изображение до копирования его байтов

Явные стили уровня ячейки, локальные метаданные изображения, состояние Checkbox по умолчанию и Boolean-значения переживают сохранение и перезагрузку XLSX, копирование и перемещение диапазонов, структурные правки строк или столбцов и восстановление снимка содержимого в той же книге; поддерживаемые межкнижные копии перестраивают ссылки места назначения

Неизвестные наборы свойств контролов, типы rich value и некорректные ссылки остаются явно неподдерживаемыми; обычные сохранения Open XML сохраняют исходные метаданные при включённом PreserveUnsupportedParts, а копирование неизвестных метаданных функций ячейки в другую книгу отклоняется до изменения места назначения

Добавление поддерживаемой функции в импортированный набор свойств или граф изображения с неподдерживаемым пространством имён или конфликтующими связями владельца отклоняется при сохранении вместо перестроения графа из угаданных метаданных

Разреженные унаследованные форматы Checkbox

TXLSXWorksheet.SetRowCheckboxFormat(FirstRow, LastRow, DefaultState) и SetColumnCheckboxFormat(FirstCol, LastCol, DefaultState) применяют инклюзивный диапазон оси с отсчётом от единицы, не создавая ячеек и не инициализируя значений; DefaultState по умолчанию xlcdUnchecked

ClearRowCellControlFormat(FirstRow, LastRow) и ClearColumnCellControlFormat(FirstCol, LastCol) явно очищают соответствующий унаследованный формат с сохранением значений; недопустимые диапазоны возбуждают EArgumentOutOfRangeException до изменения данных

Прямые контролы ячеек и прямые очистки имеют приоритет над унаследованными форматами, конечные скопированные области форматов имеют приоритет над строками, а строки — над столбцами, независимо от порядка присвоения; последнее присвоение на одном уровне выигрывает

Импортированный элемент ячейки имеет прямой XF по умолчанию, когда атрибут s опущен, сохраняя пустые маски очистки, которые Excel записывает без явного нулевого индекса; отсутствующие элементы ячеек по-прежнему наследуют формат оси

Отсутствующая ячейка сохраняет Value = Unassigned, даже когда её унаследованное состояние Checkbox по умолчанию — checked; состояние по умолчанию — метаданные вставки и не порождает Boolean-значение при чтении или отрисовке

Присвоение FormatIndex заменяет прямой формат контрола, включая явное присвоение нуля, маскирующее унаследованные контролы; частичные изменения шрифта, заливки, границ, числового формата, выравнивания или защиты формат контрола сохраняют

Унаследованные форматы переживают структурные правки, поддерживаемые копии диапазонов и листов и круговые преобразования XLSX; межкнижная копия перемапит известные наборы свойств и отклоняет неизвестные унаследованные метаданные контролов до изменения места назначения

Сохранение и семантическая нормализация проверяют сложность разреженной границы перед её обходом, с лимитами 1,000,000 разделов и 16,000,000 оценочных проверок разрешения наложений; чрезмерно фрагментированный граф контролов возбуждает EXLSXSemanticBudget вместо запуска неограниченного декартова обхода

TXLSXRange.ApplyFormatPatch принимает xfpCellControl, чтобы скопировать эффективный формат Checkbox или очистку без изменения значений, заменяя существующие прямые форматы контролов и отклоняя неизвестные контролы до изменения места назначения

TXLSXCellStyleState.CellControlSlot — представление наложения: ноль означает явную очистку, от 1 до 3 идентифицируют состояния Checkbox по умолчанию unchecked, checked и blank, а отрицательные слоты ссылаются на импортированные XF функций; импортированные номера слотов принадлежат своей книге и должны перемапиться при межкнижном копировании

Снимки контролов только для чтения и семантическое сравнение используют эффективный разреженный формат без материализации отсутствующих ячеек; снимки содержимого сохраняют прямые маски контролов, а CellImageCount считает сохранённые носители изображений в ячейке — поддерживаемые или нет — без копирования байтов изображений

Переносимый захват рисует Boolean-значения Checkbox и явно отклоняет вид Checkbox с blank или не-Boolean значением; запрошенная квота сетки проверяется перед обходом большого унаследованного диапазона

Эти API доступны на ячейках TXLSXWorkbook; движок Classic XLS не открывает создание современных cell-control и rich-value изображений

GetConversionReport сообщает о потерях изображений в ячейке и контролов ячеек для вывода OpenDocument и XLSB, которые сохраняют запасные значения, опуская метаданные современных функций; используйте проверенное сохранение, чтобы просмотреть или отклонить эти потери

Граф пакета следует спецификациям Microsoft local image rich-value specification и Checkbox feature property bag specification; доступность в конкретной сборке Excel не устанавливает поддержку в этой библиотеке, а круговые преобразования библиотеки не устанавливают эквивалентность нативной отрисовки в сборке Excel без этих функций

Проба совместимости на Excel 16.0 build 20430 открыла и сохранила сгенерированный пакет Checkbox, но не открыла пригодного API авторинга Checkbox или локальных изображений в ячейке; она открыла пакет изображений с требуемыми флагами метаданных rich value и заменила его неподдерживаемое локальное изображение на #FIELD! при повторном сохранении