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; } }