namespace QWERTYkez.ExcelProcessor;
/// Представляет книгу Excel
public interface IBook
{
/// Возвращает список всех листов в книге.
IReadOnlyList GetSheets();
/// Возвращает лист по имени или null, если лист не найден.
/// Имя листа (регистр учитывается).
ISheet? Sheet(string name);
/// Пытается получить лист по имени.
/// Имя листа.
/// Найденный лист или null.
/// true, если лист найден, иначе false.
bool TryGetSheet(string name, out ISheet sheet);
/// Пытается добавить новый лист с указанным именем и выполняет его настройку.
/// Имя нового листа (должно быть уникальным в книге).
/// Действие для редактирования листа (может быть null).
/// true, если лист успешно создан, иначе false (например, имя уже существует).
bool TryAddSheet(string name, Action? edit = null);
/// Удаляет лист по имени.
/// Имя удаляемого листа.
/// true, если лист существовал и был удалён, иначе false.
bool TryRemoveSheet(string name);
/// Удаляет лист.
/// Удаляемый лист.
/// true, если лист был удалён, иначе false.
bool TryRemoveSheet(ISheet sheet);
/// Возвращает список всех числовых форматов, определённых в книге (встроенные и пользовательские).
IReadOnlyList GetNumberFormats();
/// Создаёт новый пользовательский числовой формат (если формат с таким кодом уже существует, может вернуть существующий).
/// Код формата (например, "# ##0,00").
/// Объект формата, привязанный к книге.
NumberFormatPattern CreateNumberFormat(string format);
}
/// Представляет лист Excel
public interface ISheet
{
/// Индекс листа в книге (начиная с 1).
int Index { get; }
/// Имя листа (уникальное в книге).
string Name { get; }
/// Пытается изменить имя листа.
/// Новое имя (не должно совпадать с существующими).
/// true, если переименование выполнено, иначе false.
bool TrySetName(string name);
/// Возвращает строку по её индексу (начиная с 1). Если строка отсутствует, создаёт пустую.
IRow Row(uint row);
/// Редактирует строку, применяя делегат, и возвращает текущий лист (fluent).
/// Индекс строки (начиная с 1).
/// Действие над строкой.
ISheet Row(uint row, Action edit);
/// Возвращает столбец по его индексу (начиная с 1). Если столбец отсутствует, создаёт пустой.
IColumn Col(uint col);
/// Редактирует столбец по индексу.
ISheet Col(uint col, Action edit);
/// Возвращает столбец по буквенному обозначению (например, "A", "AB").
IColumn Col(string col);
/// Редактирует столбец по буквенному обозначению.
ISheet Col(string col, Action edit);
/// Возвращает диапазон ячеек по начальным и конечным индексам строк и столбцов.
IRange RangeByIndexes(uint startRow, uint startCol, uint endRow, uint endCol);
/// Возвращает диапазон ячеек по начальным и конечным координатам с буквенным обозначением столбцов.
IRange RangeByIndexes(uint startRow, string startCol, uint endRow, string endCol);
/// Редактирует диапазон, заданный начальными и конечными индексами.
ISheet RangeByIndexes(uint startRow, uint startCol, uint endRow, uint endCol, Action edit);
/// Редактирует диапазон, заданный начальными и конечными координатами с буквенными столбцами.
ISheet RangeByIndexes(uint startRow, string startCol, uint endRow, string endCol, Action edit);
/// Возвращает диапазон, начиная с указанной ячейки, заданной размером (строки x столбцы).
IRange RangeByLength(uint startRow, uint startCol, uint rows, uint cols);
/// Возвращает диапазон по начальной ячейке и размеру с буквенным обозначением столбца.
IRange RangeByLength(uint startRow, string startCol, uint rows, uint cols);
/// Редактирует диапазон, заданный начальной ячейкой и размером.
ISheet RangeByLength(uint startRow, uint startCol, uint rows, uint cols, Action edit);
/// Редактирует диапазон, заданный начальной ячейкой и размером (буква столбца).
ISheet RangeByLength(uint startRow, string startCol, uint rows, uint cols, Action edit);
/// Возвращает ячейку по номеру строки и столбца (оба начиная с 1).
ICell Cell(uint row, uint col);
/// Редактирует ячейку по строке и столбцу.
ISheet Cell(uint row, uint col, Action edit);
/// Устанавливает строковое значение в ячейку.
ISheet Cell(uint row, uint col, string value);
/// Устанавливает логическое значение в ячейку.
ISheet Cell(uint row, uint col, bool value);
/// Устанавливает формулу в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку с указанным числовым форматом.
ISheet Cell(uint row, uint col, long value, NumberFormatPattern? format = null);
/// Возвращает ячейку по строке и букве столбца (например, 1, "A").
ICell Cell(uint row, string col);
/// Редактирует ячейку по строке и букве столбца.
ISheet Cell(uint row, string col, Action edit);
/// Устанавливает строковое значение в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, string value);
/// Устанавливает логическое значение в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, bool value);
/// Устанавливает формулу в ячейку с числовым форматом по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку по адресу (строка, буква столбца).
ISheet Cell(uint row, string col, long value, NumberFormatPattern? format = null);
/// Очищает всё содержимое листа (значения, формулы, но не форматирование).
void ClearContents();
/// Очищает всё форматирование на листе (стили, шрифты, границы, но оставляет значения).
void ClearFormats();
/// Очищает и содержимое, и форматирование листа.
void Clear();
/// Удаляет лист из книги
void Remove();
}
/// Представляет строку на листе.
public interface IRow
{
/// Индекс строки (начиная с 1).
uint Index { get; }
///
/// Копирует текущую строку в указанную позицию (как "копировать-вставить" в Excel).
/// Исходная строка остаётся без изменений.
///
/// Индекс строки (начиная с 1), в которую будет вставлена копия.
/// Существующие строки, начиная с этой позиции, сдвигаются вниз.
/// Возвращает новую строку-копию, расположенную по указанному индексу.
/// Текущий объект IRow для цепочки вызовов (fluent).
IRow CopyTo(uint index, out IRow copiedRow);
///
/// Перемещает текущую строку в новую позицию (как "вырезать-вставить" в Excel).
/// Исходная строка удаляется, а перемещённая строка сохраняет все свои данные и форматирование.
///
/// Новый индекс строки (начиная с 1).
/// Другие строки сдвигаются, освобождая место для перемещённой строки.
/// Тот же объект IRow, но уже с новым индексом (fluent).
IRow MoveTo(uint index);
/// Высота строки
RowHeight Height { get; set; }
/// Устанавливает числовой формат для всех ячеек строки.
IRow SetNumberFormat(NumberFormatPattern format);
/// Возвращает ячейку в заданном столбце (индекс с 1).
ICell Cell(uint col);
/// Редактирует ячейку в заданном столбце.
IRow Cell(uint col, Action edit);
/// Устанавливает строковое значение в ячейку столбца.
IRow Cell(uint col, string value);
/// Устанавливает логическое значение в ячейку столбца.
IRow Cell(uint col, bool value);
/// Устанавливает формулу в ячейку столбца с числовым форматом.
IRow Cell(uint col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку столбца с числовым форматом.
IRow Cell(uint col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку столбца с числовым форматом.
IRow Cell(uint col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку столбца с числовым форматом.
IRow Cell(uint col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку столбца с числовым форматом.
IRow Cell(uint col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку столбца с числовым форматом.
IRow Cell(uint col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку столбца с числовым форматом.
IRow Cell(uint col, long value, NumberFormatPattern? format = null);
/// Возвращает ячейку по букве столбца.
ICell Cell(string col);
/// Редактирует ячейку по букве столбца.
IRow Cell(string col, Action edit);
/// Устанавливает строковое значение в ячейку по букве столбца.
IRow Cell(string col, string value);
/// Устанавливает логическое значение в ячейку по букве столбца.
IRow Cell(string col, bool value);
/// Устанавливает формулу в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку по букве столбца с числовым форматом.
IRow Cell(string col, long value, NumberFormatPattern? format = null);
/// Очищает содержимое всех ячеек строки (значения, формулы).
void ClearContents();
/// Очищает форматирование всех ячеек строки.
void ClearFormats();
/// Очищает содержимое и форматирование строки.
void Clear();
/// Удаляет строку с листа (сдвигая нижние строки вверх).
void Remove();
}
/// Представляет столбец на листе.
public interface IColumn
{
/// Индекс столбца (начиная с 1).
uint Index { get; }
/// Буквенное обозначение столбца (например, "A", "Z", "AA").
string IndexLetter { get; }
///
/// Копирует текущий столбец в указанную позицию по числовому индексу (как "копировать-вставить").
/// Исходный столбец остаётся без изменений.
///
/// Числовой индекс столбца (начиная с 1), куда будет вставлена копия.
/// Существующие столбцы, начиная с этой позиции, сдвигаются вправо.
/// Возвращает новый столбец-копию, расположенный по указанному индексу.
/// Текущий объект IColumn для цепочки вызовов.
IColumn CopyTo(uint index, out IColumn copiedColumn);
///
/// Копирует текущий столбец в указанную позицию по буквенному обозначению (как "копировать-вставить").
///
/// Буквенное обозначение столбца (например, "D", "AA"), куда будет вставлена копия.
/// Возвращает новый столбец-копию.
/// Текущий объект IColumn.
IColumn CopyTo(string index, out IColumn copiedColumn);
///
/// Перемещает текущий столбец в новую позицию по числовому индексу (как "вырезать-вставить").
/// Исходный столбец удаляется, а перемещённый столбец сохраняет свои данные и форматирование.
///
/// Новый числовой индекс столбца (начиная с 1).
/// Тот же объект IColumn с новым индексом (fluent).
IColumn MoveTo(uint index);
///
/// Перемещает текущий столбец в новую позицию по буквенному обозначению (как "вырезать-вставить").
///
/// Новое буквенное обозначение столбца (например, "E").
/// Тот же объект IColumn с новым индексом.
IColumn MoveTo(string index);
/// Ширина столбца (чтение и запись).
ColumnWidth Width { get; set; }
/// Устанавливает числовой формат для всех ячеек столбца.
IColumn SetNumberFormat(NumberFormatPattern format);
/// Возвращает ячейку в заданной строке (индекс с 1).
ICell Cell(uint row);
/// Редактирует ячейку в заданной строке.
IColumn Cell(uint row, Action edit);
/// Устанавливает строковое значение в ячейку строки.
IColumn Cell(uint row, string value);
/// Устанавливает логическое значение в ячейку строки.
IColumn Cell(uint row, bool value);
/// Устанавливает формулу в ячейку строки с числовым форматом.
IColumn Cell(uint row, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку строки с числовым форматом.
IColumn Cell(uint row, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку строки с числовым форматом.
IColumn Cell(uint row, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку строки с числовым форматом.
IColumn Cell(uint row, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку строки с числовым форматом.
IColumn Cell(uint row, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку строки с числовым форматом.
IColumn Cell(uint row, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку строки с числовым форматом.
IColumn Cell(uint row, long value, NumberFormatPattern? format = null);
/// Очищает содержимое всех ячеек столбца.
void ClearContents();
/// Очищает форматирование всех ячеек столбца.
void ClearFormats();
/// Очищает содержимое и форматирование столбца.
void Clear();
/// Удаляет столбец с листа (сдвигая правые столбцы влево).
void Remove();
}
/// Представляет прямоугольный диапазон ячеек на листе.
public interface IRange
{
/// Объединяет ячейки диапазона в одну (содержимое левой верхней ячейки сохраняется).
/// true, если объединение выполнено (диапазон не был объединён ранее).
bool TryMerge();
/// Разъединяет ранее объединённый диапазон (восстанавливает исходные ячейки, содержимое остаётся в левой верхней).
void Unmerge();
/// Проверяет, объединён ли диапазон (как единое целое).
bool IsMerged { get; }
/// Возвращает диапазон, представляющий объединённую область, если текущий диапазон является частью объединения.
IRange? GetMergedRange();
/// Пытается получить объединённый диапазон, содержащий текущий.
bool TryGetMergedRange(IRange range);
/// Номер начальной строки диапазона (1-based).
uint RowStart { get; }
/// Номер конечной строки.
uint RowEnd { get; }
/// Номер начального столбца.
uint ColStart { get; }
/// Номер конечного столбца.
uint ColEnd { get; }
/// Буквенное обозначение начального столбца.
string ColStartLetter { get; }
/// Буквенное обозначение конечного столбца.
string ColEndLetter { get; }
/// Количество строк в диапазоне.
uint Rows { get; }
/// Количество столбцов в диапазоне.
uint Cols { get; }
///
/// Копирует текущий диапазон в новую позицию (верхний левый угол) – как "копировать-вставить".
/// Исходный диапазон остаётся неизменным.
///
/// Номер строки (начиная с 1) для верхнего левого угла вставляемого диапазона.
/// Номер столбца (начиная с 1) для верхнего левого угла.
/// Возвращает новый диапазон-копию, расположенный по указанным координатам.
/// Текущий объект IRange (fluent).
IRange CopyTo(uint rowIndex, uint colIndex, out IRange copiedRange);
///
/// Копирует текущий диапазон в новую позицию (верхний левый угол) с указанием столбца буквой – как "копировать-вставить".
/// Исходный диапазон остаётся неизменным.
///
/// Номер строки (начиная с 1).
/// Буквенное обозначение столбца (например, "C").
/// Возвращает новый диапазон-копию.
/// Текущий объект IRange.
IRange CopyTo(uint rowIndex, string colIndex, out IRange copiedRange);
///
/// Перемещает текущий диапазон в новую позицию (верхний левый угол) – как "вырезать-вставить".
/// Исходный диапазон очищается, а текущий объект IRange перемещается на новое место.
///
/// Номер строки для нового положения верхнего левого угла.
/// Номер столбца для нового положения.
/// Тот же объект IRange, но уже с новыми координатами (fluent).
IRange MoveTo(uint rowIndex, uint colIndex);
///
/// Перемещает текущий диапазон в новую позицию (верхний левый угол) с указанием столбца буквой – как "вырезать-вставить".
/// Исходный диапазон очищается, а текущий объект IRange перемещается на новое место.
///
/// Номер строки.
/// Буквенное обозначение столбца.
/// Тот же объект IRange с новыми координатами.
IRange MoveTo(uint rowIndex, string colIndex);
/// Устанавливает числовой формат для всех ячеек диапазона.
IRange SetNumberFormat(NumberFormatPattern format);
/// Устанавливает выравнивание для всех ячеек диапазона.
IRange SetCellAlign(CellAlign format);
/// Устанавливает границы для всех ячеек диапазона.
IRange SetCellBorder(CellBorder format);
/// Устанавливает заливку для всех ячеек диапазона.
IRange SetCellFill(CellFill format);
/// Устанавливает шрифт для всех ячеек диапазона.
IRange SetCellFont(CellFont format);
/// Перечисляет все ячейки диапазона (по строкам).
IEnumerable Cells { get; }
/// Получает ячейку внутри диапазона по относительным координатам (начиная с 1).
bool GetSubCell(uint row, uint col, out ICell cell);
/// Редактирует ячейку внутри диапазона по относительным координатам.
bool TryEditSubCell(uint row, uint col, Action edit);
/// Устанавливает строковое значение в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, string value);
/// Устанавливает логическое значение в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, bool value);
/// Устанавливает формулу в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку по относительным координатам.
bool TryEditSubCell(uint row, uint col, long value, NumberFormatPattern? format = null);
/// Получает ячейку по относительной строке и букве столбца.
bool GetSubCell(uint row, string col, out ICell cell);
/// Редактирует ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, Action edit);
/// Устанавливает строковое значение в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, string value);
/// Устанавливает логическое значение в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, bool value);
/// Устанавливает формулу в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, string formula, NumberFormatPattern? format = null);
/// Устанавливает дату в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, float value, NumberFormatPattern? format = null);
/// Устанавливает целое число в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число в ячейку по относительной строке и букве столбца.
bool TryEditSubCell(uint row, string col, long value, NumberFormatPattern? format = null);
/// Очищает содержимое всех ячеек диапазона.
void ClearContents();
/// Очищает форматирование всех ячеек диапазона.
void ClearFormats();
/// Очищает и содержимое, и форматирование.
void Clear();
}
/// Представляет одну ячейку на листе.
public interface ICell
{
/// Проверяет, входит ли ячейка в объединённый диапазон.
bool IsMerged { get; }
/// Возвращает объединённый диапазон, если ячейка объединена, иначе null.
IRange? GetMergedRange();
/// Пытается получить объединённый диапазон, содержащий эту ячейку.
bool TryGetMergedRange(IRange range);
/// Номер строки (1-based).
uint Row { get; }
/// Номер столбца (1-based).
uint Col { get; }
/// Буква столбца.
string ColLetter { get; }
///
/// Копирует текущую ячейку в указанную позицию (как "копировать-вставить").
/// Исходная ячейка остаётся без изменений.
///
/// Номер строки (начиная с 1), куда будет вставлена копия.
/// Номер столбца (начиная с 1).
/// Возвращает новую ячейку-копию.
/// Текущий объект ICell для цепочки вызовов.
ICell CopyTo(uint rowIndex, uint colIndex, out ICell copiedCell);
///
/// Копирует текущую ячейку в указанную позицию с буквенным обозначением столбца (как "копировать-вставить").
/// Исходная ячейка остаётся без изменений.
///
/// Номер строки.
/// Буквенное обозначение столбца (например, "B").
/// Возвращает новую ячейку-копию.
/// Текущий объект ICell.
ICell CopyTo(uint rowIndex, string colIndex, out ICell copiedCell);
///
/// Перемещает текущую ячейку в новую позицию (как "вырезать-вставить").
/// Исходная ячейка очищается, а текущий объект ICell перемещается в новое место.
///
/// Новый номер строки.
/// Новый номер столбца.
/// Тот же объект ICell с новыми координатами (fluent).
ICell MoveTo(uint rowIndex, uint colIndex);
///
/// Перемещает текущую ячейку в новую позицию с буквенным обозначением столбца (как "вырезать-вставить").
/// Исходная ячейка очищается, а текущий объект ICell перемещается в новое место.
///
/// Новый номер строки.
/// Буквенное обозначение столбца.
/// Тот же объект ICell с новыми координатами.
ICell MoveTo(uint rowIndex, string colIndex);
/// Высота строки, содержащей ячейку (чтение и запись).
RowHeight Height { get; set; }
/// Ширина столбца, содержащего ячейку.
ColumnWidth Width { get; set; }
/// Проверяет, содержит ли ячейка числовое значение (целое или с плавающей точкой).
bool IsNumber { get; }
/// Проверяет, является ли содержимое логическим (TRUE/FALSE).
bool IsBoolean { get; }
/// Проверяет, содержит ли ячейка код ошибки (например, #DIV/0!).
bool IsError { get; }
/// Проверяет, интерпретируется ли значение как дата (по числовому формату).
bool IsDate { get; }
/// Проверяет, заблокирована ли ячейка (атрибут защиты).
bool IsLocked { get; }
/// Проверяет, содержит ли ячейка формулу.
bool HasFormula { get; }
/// Возвращает текстовое представление содержимого ячейки (как оно отображается).
string GetString();
/// Возвращает числовой формат ячейки.
NumberFormatPattern? GetNumberFormat();
/// Возвращает выравнивание текста ячейки.
CellAlign GetCellAlign();
/// Возвращает границы ячейки.
CellBorder GetCellBorder();
/// Возвращает заливку ячейки.
CellFill GetCellFill();
/// Возвращает шрифт ячейки.
CellFont GetCellFont();
/// Пытается извлечь логическое значение.
bool TryGetBoolean(out bool value);
/// Возвращает логическое значение или null, если тип не соответствует.
bool? GetBoolean();
/// Пытается извлечь дату и время.
bool TryGetDate(out DateTime value);
/// Возвращает дату или null.
DateTime? TryGetDate();
/// Пытается извлечь число (double).
bool TryGetNumber(out double value);
/// Возвращает число или null.
double? TryGetNumber();
/// Пытается установить формулу (без вычисленного значения).
/// Текст формулы (например, "SUM(A1:A5)").
/// Необязательный числовой формат для результата.
bool TrySet(string formula, NumberFormatPattern? format = null);
/// Устанавливает формулу (выбрасывает исключение при ошибке).
ICell Set(string formula, NumberFormatPattern? format = null);
/// Устанавливает числовой формат ячейки (не меняя значение).
ICell Set(NumberFormatPattern format);
/// Устанавливает выравнивание текста ячейки.
ICell Set(CellAlign format);
/// Устанавливает границы ячейки.
ICell Set(CellBorder format);
/// Устанавливает заливку ячейки.
ICell Set(CellFill format);
/// Устанавливает шрифт ячейки.
ICell Set(CellFont format);
/// Устанавливает богатый текст (форматированный) с помощью делегата.
ICell Text(Action value);
/// Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).
bool TryText(out ICellText cellText);
/// Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).
ICellText Text();
/// Устанавливает простое текстовое значение (без форматирования).
ICell Set(string value);
/// Устанавливает логическое значение.
ICell Set(bool value);
/// Устанавливает дату, опционально с числовым форматом.
ICell Set(DateTime value, NumberFormatPattern? format = null);
/// Устанавливает десятичное число (сохраняется как double).
ICell Set(decimal value, NumberFormatPattern? format = null);
/// Устанавливает число двойной точности.
ICell Set(double value, NumberFormatPattern? format = null);
/// Устанавливает число с плавающей точкой.
ICell Set(float value, NumberFormatPattern? format = null);
/// Устанавливает целое число.
ICell Set(int value, NumberFormatPattern? format = null);
/// Устанавливает длинное целое число.
ICell Set(long value, NumberFormatPattern? format = null);
/// Очищает содержимое ячейки (значение/формулу, но не форматирование).
void ClearContent();
/// Очищает форматирование ячейки (сбрасывает стиль).
void ClearFormat();
/// Очищает и содержимое, и форматирование.
void Clear();
}
/// Представляет богатый текст внутри ячейки (несколько форматированных фрагментов).
public interface ICellText
{
/// Количество фрагментов (Run) в тексте.
int Count { get; }
/// Возвращает все фрагменты.
IEnumerable GetRuns();
/// Возвращает фрагмент по индексу или null.
IRun? GetRunAt(int index);
/// Пытается получить фрагмент по индексу.
bool TryGetRunAt(int index, out IRun run);
/// Первый фрагмент или null.
IRun? First();
/// Пытается получить первый фрагмент.
bool TryGetFirst(out IRun run);
/// Последний фрагмент или null.
IRun? Last();
/// Пытается получить последний фрагмент.
bool TryGetLast(out IRun run);
/// Пытается удалить фрагмент.
bool TryRemoveRun(IRun run);
/// Удаляет фрагмент по индексу.
bool TryRemoveRun(int index);
/// Удаляет фрагмент по индексу и возвращает удалённый.
bool TryRemoveRun(int index, out IRun? removed);
/// Добавляет разрыв строки (перенос внутри ячейки).
ICellText Break();
/// Добавляет обычный текстовый фрагмент.
ICellText Run(string text, RunFormat? format = null);
/// Добавляет фрагмент с последующим разрывом строки.
ICellText RunBreak(string text, RunFormat? format = null);
/// Добавляет подстрочный фрагмент (эквивалентно AddRun с Vertical = Subscript).
ICellText Sub(string text, RunFormat? format = null);
/// Добавляет надстрочный фрагмент.
ICellText Sup(string text, RunFormat? format = null);
/// Вставляет фрагмент по индексу.
bool TryInsertRun(int index, string text, RunFormat? format = null);
/// Вставляет фрагмент с последующим разрывом строки по индексу.
bool TryInsertRunBreak(int index, string text, RunFormat? format = null);
/// Вставляет подстрочный фрагмент по индексу.
bool TryInsertSub(int index, string text, RunFormat? format = null);
/// Вставляет надстрочный фрагмент по индексу.
bool TryInsertSup(int index, string text, RunFormat? format = null);
/// Применяет заданный формат ко всем существующим фрагментам (поверх их текущего форматирования, заменяя неуказанные свойства).
void ApplyFormatToAllRuns(RunFormat format);
/// Удаляет все фрагменты, очищая текст ячейки.
void Clear();
}
/// Представляет один форматированный фрагмент текста внутри ячейки.
public interface IRun
{
/// Текст фрагмента.
string Text { get; set; }
/// Форматирование фрагмента (может быть null, что означает отсутствие явного форматирования).
RunFormat? Format { get; set; }
}