Часть 1

Windows Form и WPF

Reogrid поддерживает технологии Windows Form и WPF. Поэтому в архиве с файлами компонента приведено два варианта компонента: WPF-версия содержит эти три буквы в названии папки.

Выбор редакции

Компонент Reogrid доступен в четырёх основных редакциях:

  • Минимальная (Minimum или WPFMinimum) – содержит лишь библиотеку unvell.ReoGrid.dll. Доступны все основные функции.
  • Стандартная (Release) – все основные функции и вычисление формул
  • Стандартная для клиентского профиля (ReleaseCP или WPFReleaseCP) – все основные функции и вычисление формул, для .NET Client Profile.
  • Полная (Full или WPFFull). Помимо указанных выше, содержит библиотеки для работы со сценариями: unvell.ReoScript.dll и unvell.ReoScript.EditorLib.dll. Также в состав этой редакции входят два сторонних компонента: Antlr3.Runtime.dll и FastColoredTextBox.dll.

Первое подключение Reogrid

  1. Копируем библиотеки компонента в папку Debug / Release вашего проекта (выбранную редакцию).
  2. В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
  3. В свойствах панели элементов управления выбираем пункт “Выбрать компоненты”, указываем на библиотеку Reogrid и выбираем подключаемые компоненты. Для неанглоязычного интерфейса подойдёт лишь сам табличный элемент управления, так как остальные не поддерживают локализацию.
  4. Если всё сделано верно, то в панели элементов управления появится Reogrid.

Обновление Reogrid

  1. Переходим к свойствам проекта. В разделе “Ссылки” отключаем все библиотеки Reogrid.
  2. Из папки проекта Debug / Release вашего проекта удаляем файлы устаревшей сборки Reogrid.
  3. Копируем файлы новой версии в папку Debug / Release вашего проекта.
  4. В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
  5. Пересобираем проект.

Настройка компонента

Далее подразумевается, что в проект добавлен компонент Reogrid с именем rgrid. Он аналогичен создаваемому программно объекту Workbook

Изначально доступен один лист, создаваемый по умолчанию. Он доступен по псевдониму Currentsheet (текущий лист)

Альтернативное создание листа с именем по умолчанию или пользовательским:

'VB
Dim sheet As Worksheet = rgrid.CreateWorksheet()
Dim sheet As Worksheet = rgrid.CreateWorksheet("Мой_лист")

//C#
var sheet = rgrid.CreateWorksheet();
var sheet = rgrid.CreateWorksheet('Мой_лист');

Если имя не указано, является пустой строкой или равно nothing/null, ReoGrid автоматически присвоит имена вида ‘Sheet1′, ‘Sheet2′… В книге (WorkBook) не должно быть листов с одинаковыми именами.

Добавление/Вставка листа

'VB
'Вызов метода
rgrid.AddWorksheet(sheet)
rgrid.InsertWorksheet(1, sheet)
'Использование коллекции листов
rgrid.Worksheets.Add(sheet)
rgrid.Worksheets.Insert(1, sheet)

//C#
// Вызов метода
rgrid.AddWorksheet(sheet);
rgrid.InsertWorksheet(1, sheet);
// Использование коллекции листов
rgrid.Worksheets.Add(sheet);
rgrid.Worksheets.Insert(1, sheet);

Копирование листа

Здесь может быть установлено и имя листа

'VB
Dim sheet2 As Worksheet = rgrid.CopyWorksheet(0, 1)

//C#
var sheet2 = rgrid.CopyWorksheet(0, 1);

Перемещение листа

'VB
rgrid.MoveWorksheet(0, 3)

//C#
rgrid.MoveWorksheet(0, 3);

Сброс всей книги

'VB
rgrid.Reset()

//C#
rgrid.Reset();

Параметры книги или листа

Включение/выключение параметра

Начиная с версии 0.8.8, существуют параметры для всей книги и для отдельных её листов

Параметры книги (WorkbookSettings)

'VB
'Универсальный вариант значение true включает параметр, false - выключает
rgrid.SetSettings(параметр As Workbookettings, значение As Boolean)

'Включает параметр
rgrid.EnableSettings(параметр As Workbookettings)

'Выключает параметр
rgrid.DisableSetting(параметр As Workbookettings)

'Получаем текущее значение параметра
Dim value As Boolean = rgrid.HasSetting(параметр As Workbookettings)

//C#
//Универсальный вариант значение true включает параметр, false - выключает
rgrid.SetSettings(Workbookettings параметр, bool значение);

//Включает параметр
rgrid.EnableSettings(WorkbookSettings параметр);

//Выключает параметр
rgrid.DisableSetting(WorkbookSettings параметр);

//Получаем текущее значение параметра
bool value = rgrid.HasSetting(WorkbookSettings параметр);

Параметры книги

Параметр Описание
Отображение, внешний вид
WorkbookSettings.View_ShowSheetTabControl Показывать вкладки-листы
WorkbookSettings.View_ShowScrollsShow Показывать полосы прокрутки
WorkbookSettings.View_ShowHorScrollShow Показывать горизонтальную полосу прокрутки
WorkbookSettings.View_ShowVerScrollShow Показывать вертикальную полосу прокрутки
Выполнение сценариев / Script Execution
WorksheetSettings.Script_AutoRunOnload Разрешить автозапуск сценария после загрузки таблицы из потока
WorksheetSettings.Script_PromptBeforeAutoRun Показывать ли сообщение, подсказывающее пользователю о запуске сценария, когда сценарий загружен из потока.

Параметры листа (WorksheetSettings)

'VB
'Универсальный вариант значение true включает параметр, false - выключает
rgrid.SetSettings(параметр As WorksheetSettings, значение As Boolean)

'Включает параметр
rgrid.EnableSettings(параметр As WorksheetSettings)

'Выключает параметр
rgrid.DisableSetting(параметр As WorksheetSettings)

'Получаем текущее значение параметра
Dim value As Boolean = rgrid.HasSetting(параметр As WorksheetSettings)

'Выключение сразу двух параметров
rgrid.SetSettings(Параметр1 As WorksheetSettings Or Параметр2 As WorksheetSettings, False)

//C#
//Универсальный вариант значение true включает параметр, false - выключает
rgrid.SetSettings(WorksheetSettings параметр, bool значение);

//Включает параметр
rgrid.EnableSettings(WorksheetSettings параметр);

//Выключает параметр
rgrid.DisableSetting(WorksheetSettings параметр);

//Получаем текущее значение параметра
bool value = rgrid.HasSetting(WorksheetSettings параметр);

//Выключение сразу двух параметров
rgrid.SetSettings(WorksheetSettings Параметр1 | WorksheetSettings Параметр2, False);

Параметры листа

Параметр Описание
WorksheetSettings.Behavior_All Все параметры с префиксом Behavior
WorksheetSettings.Behavior_AutoPickingCellAddress Разрешить выбирать адрес из выделенной ячейки в процессе правки формулы
WorksheetSettings.Behavior_MouseWheelToScroll Разрешить прокрутку таблицы колесом мыши
WorksheetSettings.Behavior_MouseWheelToZoom Разрешить пользователю масштабировать таблицу колесом мыши
WorksheetSettings.Behavior_ShortcutKeyToZoom Разрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus)
WorksheetSettings.Behavior_AllowUserPageBreaks Разрешить пользователю вставлять или настраивать разрывы страниц с помощью мыши
Behavior_DragToMoveCells Разрешить перемещать или копировать выделенный диапазон перетаскиванием мышью
Behavior_DragToMoveColumnHeader Разрешить пользователю перемещать весь столбец перетаскиванием мышью (Зарезервировано)
Behavior_ScrollToFocusCell Всегда разрешать автоматическую прокрутку листа для показа выбранных ячеек (имеющих фокус)
Behavior_AllowUserChangingPageBreaks Разрешить пользователю вставлять, удалять или регулировать разделители страниц листа
Правка
WorksheetSettings.Edit_Readonly Элемент управления будет работать в режиме “Только для чтения”. Внесение каких-либо изменений запрещено
WorksheetSettings.Edit_AutoFormatCell Разрешить форматировать данные после правки текста пользователем
WorksheetSettings.Edit_FriendlyPercentInput Разрешить отображение сомвола “процент” при вводе пользоателем значения ячейки с “процентным” форматом данных
WorksheetSettings.Edit_AutoAdjustRowHeight Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта
WorksheetSettings.Edit_AllowAdjustRowHeight Разрешить пользователю настраивать высоту строк с помощью мыши
WorksheetSettings.Edit_AllowAdjustColumnWidth Разрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием)
Edit_AllowAdjustColumnWidth Разрешить пользователю регулировать ширину столбца перетаскиванием мышью
Отображение, внешний вид
WorksheetSettings.View_ShowColumnHeader Показывать заголовки столбцов
WorksheetSettings.View_ShowRowHeader Показывать заголовки строк
WorksheetSettings.View_ShowHorizontalRuler Показывать горизонтальную линейку (зарезервировано)
WorksheetSettings.View_ShowVerticalRuler Показывать вертикальную линейку (зарезервировано)
WorksheetSettings.View_ShowGridLine Показывать линии сетки
View_ShowHiddenCellLine Разрешить отображение линии на скрытом заголовке строк
WorksheetSettings.View_AllowShowRowOutlines Разрешить показывать внешние границы строк, если они не замкнуты (outlines exiting)
WorksheetSettings.View_AllowShowColumnOutlines Разрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting)
? WorksheetSettings.View_MouseWheelToScroll Разрешить прокрутку листа колесом мыши
? WorksheetSettings.View_ShowPrintAreas Включить отображение областей печати для печатаемых областей
View_ShowPageBreaks Разрешить отображать линии разделителя страниц
View_AllowCellTextOverflow Сделать декст ячеек отображаемым только внутри ячейки, не перекрывая соседние ячейки
Подсчёт формул
Formula_AutoUpdateReferenceCell Разрешить автоматическое обновление ссылок на ячейки в формуле
Formula_AutoPickingCellAddress Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.8.8 зарезервировано)
Formula_AutoRebuild Разрешить автоматически корректировать или перестраивать формулу (0.8.8 зарезервировано)

События листа

Событие Когда возникает
WorksheetCreated После создания листа
WorksheetInserted После вставки листа
WorksheetRemoved После удаления листа
BeforeWorksheetNameChange Перед переименованием листа
WorksheetNameChanged После переименования листа

События ячеек

Событие Когда возникает
BeforeCellEdit Перед любыми изменениями в ячейках в режиме правки
AfterCellEdit Когда какие-либо ячейки правятся пользователем
CellDataChanged Когда изменяются данные в ячейках
CellMouseEnter Когда указатель мыши перемещается в ячейку и зависает над ней
CellMouseLeave Когда указатель мыши покидает ячейку
CellMouseDown Когда происходит нажатие кнопки мыши, а указатель находится в ячейке
CellMouseUp Когда происходит отпускание кнопки мыши, а указатель находится в ячейке
CellMouseMove Когда указатель мыши движется внутри ячейки

События строк и столбцов

Событие Когда возникает
RowInserted Когда пользователь вставляет строки
RowDeleted Когда пользователь удаляет строки
ColInserted Когда пользователь вставляет столбцы
ColDeleted Когда пользователь вставляет столбцы

События диапазонов ячеек

Событие Когда возникает
RangeMerged Когда объединяются ячейки диапазона
RangeUnmerged Когда отменяется объединение ячеек диапазона
RangeStyleChanged Когда происходит установка стиля

События границ

Событие Когда возникает
BorderAdded Когда добавляются границы
BorderRemoved Когда удаляются границы

События выделенного

Событие Когда возникает
SelectionRangeChanged При изменении диапазона выделения
SelectionRangeChanging Во время изменения выделения мышью
SelectionModeChanged При изменении режима выделения
SelectionStyleChanged При изменении стиля выделения
SelectionForwardDirectionChanged При изменении направления перемещения фокуса ввода
SelectionMovedForward Когда выделение переносится в следующую позицию
HoverPosChanged Когда указатель мыши движется над ячейками
FocusPosChanged Когда фокус переходит к другой ячейке

События внешних границ (Outline)

Событие Когда возникает
OutlineAdded Когда в таблицу добавлена внешняя граница
OutlineRemoved Когда внешняя граница удалена из таблицы
BeforeOutlineCollapse Когда пользователь щёлкает на кнопке “-” за пределами таблицы – для её сворачивания
AfterOutlineCollapse Когда граница замкнулась
BeforeOutlineExpand Когда пользователь щёлкает на кнопке “+” за пределами таблицы – для её разворачивания
AfterOutlineExpand Когда внешняя граница развёрнута

События действий (Action)

Событие Когда возникает
ActionPerformed При выполнении любых действий
Undid Когда действие undid
Redid Когда действие redid

События элемента управления

Событие Когда возникает
GridScaled Во время масштабирования элемента управления (уменьшение/увеличение масштаба)
FileLoaded Когда в элемент управления загрузились данные из файлового потока (load from given stream will not fire this event)
FileSaved Когда содержимое элемента управления сохранено в файловом потоке (save into given stream will not fire this event)
Resetted Когда состояние элемента управление сбрасывается к значению по умолчанию
CellsFrozen Когда в таблице фиксируются (замораживаются) какие-либо ячейки
CellsUnfreeze Когда отменена фиксация (заморозка)

События буфера обмена

Событие Когда возникает
BeforeCopy Перед операцией копирования
AfterCopy Во время копирования диапазона из буфера обмена (Clipboard)
BeforePaste Перед операцией вставки
AfterPaste Во время вставки из буфера обмена (Clipboard)
BeforeCut Перед операцией вырезания
AfterCut Когда пользователь вырезает содержимое диапазона
OnPasteError При возникновении ошибок в процессе операции вставки

Стремление к совместимости с форматом Excel

Начиная с версии 0.8.8, Reogrid имеет повышенную совместимость с форматом Excel 2007 (xlsx): возможно как считывание данных, так и их запись. При этом поддерживаются основные стили оформления ячеек.

Теперь основной объект Reogrid представляет собой не отдельную таблицу, а книгу (Workbook), которая может состоять из вложенных листов с таблицми (WorkSheets). Для переключения таблиц служит встроенный отключаемый вкладочный элемент (Tabcontrol). Активный лист имеет псевдоним CurrentWorkSheet, который активно используется во второй части данного руководства.

Поддерживаемые встроенные функции, многие из которых совместимы с Excel

Функция Reogrid Функция Excel (Русская версия) Описание
Статистические (Statistics)
AVERAGE СРЗНАЧ Возвращает среднее арифметическое значение указанных аргументов
AVERAGEIF СРЗНАЧЕСЛИ Возвращает среднее арифметическое значение указанных аргументов, которые отвечают единому заданному критерию
COUNT Возвращает количество ячеек, содержащих числа, и подсчитывает числа в списке аргументов
COUNTIF Возвращает количество ячеек в заданном диапазоне, которые отвечают единому заданному критерию
SUM СУММ Возвращает сумму значений чисел. Пример: SUM(B11:E12)
SUMIF СУММЕСЛИ Возвращает сумму значений в диапазоне, которые соответствуют указанным критериям
Адресные (Address)
ADDRESS АДРЕС Возвращает ссылку на отдельную ячейку листа в виде текста
COLUMNS ЧИСЛСТОЛБ Возвращает количество столбцов в ссылке (reference) или массиве
INDEX ИНДЕКС Возвращает значение или ссылку (reference) на значение из таблицы или диапазона ячеек
INDIRECT ДВССЫЛ Возвращает ссылку, заданную текстовой строкой
ROWS ЧСТРОК Возвращает количество строк в ссылке (reference) или массиве
Математические вычисления (Math Calculation)
ABS Возвращает абсолютное значение числа
ACOS Возвращает арккосинус числа
ASIN Возвращает арксинус числа
ATAN Возвращает арктангенс числа
ATAN2 Возвращает арктангенс для заданных координат x и y
CEILING Возвращает число, округляемое в сторону увеличения, от нуля до ближайшего кратного указанному значению
COS Возвращает косинус числа
EXP Возвращает число e, возведенное в указанную степень
FLOOR Округление числа до ближайшего меньшего значения
MAX МАКС Возвращает наибольшее значение в списке аргументов
MIN МИН Возвращает наименьшее значение в списке аргументов
ROUND ОКРУГЛ Возвращает число, округленное с требуемой точностью. Примеры: ROUND(B8), ROUND(E8, 2)
SIN Возвращает синус числа
TAN Возвращает тангенс числа
Дата и время (DateTime)
DAY ДЕНЬ Преобразует дату в числовом формате в день месяца
DAYS ? ?
HOUR ЧАС Преобразует дату в числовом формате в часы
MILLISECOND Преобразует дату в числовом формате в миллисекунды
MINUTE МИНУТЫ Преобразует дату в числовом формате в минуты
MONTH МЕСЯЦ Преобразует дату в числовом формате в месяцы
NOW Возвращает текущие дату и время в числовом формате
SECOND СЕКУНДЫ Преобразует дату в числовом формате в секунды
TIME ВРЕМЯ Возвращает заданное время в числовом формате
TODAY СЕГОДНЯ Возвращает текущую дату в числовом формате
YEAR ГОД Преобразует дату в числовом формате в год
Строковые (String)
FIND НАЙТИ Поиск вхождения одного текстового значения в другое (с учетом регистра)
LEFT ЛЕВСИМВ Возвращают крайние слева знаки текстового значения
LEN ДЛСТР Возвращает количество символов в текстовой строке
LENB ДЛИНБ Возвращает количество байт, используемых для представления знаков в текстовой строке
LOOKUP ПРОСМОТР Возвращает значение либо из одной строки, либо одного столбца диапазона или массива
LOWER СТРОЧН Преобразует все буквы текста в строчные
MID ПСТР Возвращают заданное число знаков из строки текста, начиная с указанной позиции
RIGHT ПРАВСИМВ Возвращают крайние справа знаки текстовой строки
TRIM СЖПРОБЕЛЫ Удаляет из текста пробелы
UPPER ПРОПИСН Преобразует все буквы текста в прописные
Условия (Conditions)
AND Логическое И
IF С проверкой на условие
NOT Логическое отрицание
OR Логическое ИЛИ

Функционал и совместимость с форматом Excel 2007

Загрузка данных из файла

'VB
rgrid.Load(path, IO.FileFormat.Excel2007[,Кодировка])

//C#
rgrid.Load(path, IO.FileFormat.Excel2007[,Кодировка]);

Сохранение

'VB
rgrid.Save(path, IO.FileFormat.Excel2007[,Кодировка])

//C#
rgrid.Save(path, IO.FileFormat.Excel2007[,Кодировка]);

Поддерживаемые особенности:

  • Ввод/Вывод книги целиком (как набор листов)
  • Установки заголовков Строк и Столбцов (видимость, размер, и т.д.)
  • Стили ячеек (шрифт, цвет, выравнивание и т.д.)
  • Границы (цвет и стили)
  • Содержимое ячеек и форматы данных (числовой, денежный, процентный и т.д.)
  • Формулы (относительные ссылки и расчётные цепочки)
  • Определения именованных диапазонов ячеек

Основные действия с активным листом (CurrentWorksheet)

Обращение к ячейке

'VB
rgrid.CurrentWorksheet(1, 1) = "Какой-то текст"
rgrid.CurrentWorksheet("B2") = "Какой-то текст"

//C#
rgrid.CurrentWorksheet(1, 1) = "Какой-то текст";
rgrid.CurrentWorksheet("B2") = "Какой-то текст";

Задание имени диапазона

'VB
Dim myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4)

//C#
dynamic myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4);

Запись данных в диапазон

'VB
myRange.Data = New Object(,) {{1, 2, 3, 4}, {0.1, 0.2, 0.3, 0.4}, {"яблоко", "банан", "апельсин", "груша"}}

//C#
myRange.Data == new object[ + 1,  + 1] {{1,2,3,4},{0.1,0.2,0.3,0.4},{"яблоко","банан","апельсин","груша"}}

Задание ширины столбца

rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100)

Установка цвета фона

'VB
rgrid.CurrentWorksheet.Cells("E5").Style.BackColor = Color.LightYellow

//C#
rgrid.CurrentWorksheet.Cells("E5").Style.BackColor == Color.LightYellow;

Ширина ячейки

'VB
rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100)

//C#
rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100);

Изменяем ширину заголовка

'VB
rgrid.CurrentWorksheet.ColumnHeaders(0).WidthInPixel = 100
rgrid.CurrentWorksheet.ColumnHeaders(1).WidthInPixel = 500

//C#
rgrid.CurrentWorksheet.ColumnHeaders(0).WidthInPixel = 100;
rgrid.CurrentWorksheet.ColumnHeaders(1).WidthInPixel = 500;

Использование готового редактора, только на английском

'VB
Dim strFilename As String = Application.StartupPath & "\docs\calendar_2008_1.rgf"
Using editor As ReoGridEditor = New ReoGridEditor()
editor.CurrentFilePath = strFilename
editor.CurrentFilePath = strFilename
editor.ShowDialog()
End Using
Cursor = Cursors.Default

//C#
string strFilename = Application.StartupPath + "\\docs\\calendar_2008_1.rgf";
using (ReoGridEditor editor = new ReoGridEditor()) {
editor.CurrentFilePath = strFilename;
editor.CurrentFilePath = strFilename;
editor.ShowDialog();
}
Cursor = Cursors.Default;

Стили

Для определения факта изменения стиля отображения ReoGrid использует перечисление ‘PlainStyleFlag’

Сначала необходимо указать флаги изменяемых параметров, а затем уже и указать значения

Установка стиля

Метод

Всегда применяем стиль к диапазону. а не к отдельной ячейке.

rgrid.CurrentWorksheet.SetRangeStyle(Диапазон типа ReoGridRange, Стиль типа ReoGridRangeStyle)

Действие

rgrid.CurrentWorksheet.DoAction(new RGSetRangeStyleAction(Диапазон типа ReoGridRange, Стиль типа ReoGridStyleObject))

В сценарии (Script)

rgrid.CurrentWorksheet.getCell(0, 0).style.backgroundColor = 'red'

Получение значений стилей

Получаем стили диапазона или ячейки:

rgrid.CurrentWorksheet.GetRangeStyle(Диапазон типа ReoGridRange)
rgrid.CurrentWorksheet.GetCellStyle(Позиция_ячейки типа ReoGridPos)

Удаление стиля

Удаляем стиль для диапазона, даже если он состоит из одной ячейки.

Метод

Флаг PlainStyleFlag позволяет указать, какие стили должны быть удалены. В примере показано удаление стиля фона для выбранного диапазона ячеек.

rgrid.CurrentWorksheet.RemoveRangeStyle(New ReoGridRange(2, 2, 3, 3), PlainStyleFlag.BackAll)

Действие

Убираем фоновый цвет для выбранного диапазона:

rgrid.CurrentWorksheet.DoAction(New RGRemoveRangeStyleAction(New ReoGridRange(2, 2, 3, 3), PlainStyleFlag.BackAll))

Объединение и разделение ячеек

Объединяем ячейки, начиная с (2,1). Количество строк – 3, количество столбцов – 4:

rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(2, 1, 3, 4))

Диапазон объединения начинается в (0,0), содержит 4 строки и 6 столбцов:

rgrid.CurrentWorksheet.DoAction(New RGMergeRangeAction(New ReoGridRange(0, 0, 4, 6)))

Объединённые ячейки

Проверка: объединена ли данная ячейка с другой

Только первая слева-сверху ячейка в диапазоне объединения является объединённой ячейкой.

Для проверки факта объединения ячеек служит метод IsMergedCell:

'VB
Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.IsMergedCell(2, 1) 'ложь/false
Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.IsMergedCell(2, 2) 'истина/true
Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.IsMergedCell(2, 3) 'ложь/false

//C#
bool isMergedCell = rgrid.CurrentWorksheet.IsMergedCell(2, 1); // ложь/false
bool isMergedCell = rgrid.CurrentWorksheet.IsMergedCell(2, 2); // истина/true
bool isMergedCell = rgrid.CurrentWorksheet.IsMergedCell(2, 3); // ложь/false

Объединение строк и столбцов (Rowspan & Colspan)

Объединенная ячейка имеет два свойства, которые используются для определения того, сколько ячеек было объединено:

Ячейка в позиции 2:1 является объединённой, она содержит 4 строки (rowspan=4) и 3 столбца (colspan=3).

Для получения этих данных используем следующий код:

'VB
Dim rowspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetRowspan() 'количество объединённых строк (number of rowspan)
Dim colspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetColspan() 'количество объединённых столбцов (number of colspan)

//C#
int rowspan = rgrid.CurrentWorksheet.Cells(1, 2).GetRowspan(); //количество объединённых строк (number of rowspan)
int colspan = rgrid.CurrentWorksheet.Cells(1, 2).GetColspan(); //количество объединённых столбцов (number of colspan)

Свойство IsMergedCell позволяет определить факт объединения:

'VB
Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.Cells(1, 2).IsMergedCell

//C#
bool isMergedCell = rgrid.CurrentWorksheet.Cells(1, 2).IsMergedCell;

Поиск объединённых ячеек

ReoGrid поддерживает метод GetMergedCellOfRange, который используется для поиска объединенной ячейки в определенном диапазоне.

'VB
Dim output As ReoGridCell = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input)

//C#
ReoGridCell output = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input());

Допустимые и недопустимые ячейки

Ячейки, объединённые с другими, становятся недействительными. Недействительной ячейке нельзя задать данные или стили.

Проверить ячейки позволяет метод IsValidCell.

'VB
rgrid.CurrentWorksheet.IsValidCell(2, 2) ' true
rgrid.CurrentWorksheet.IsValidCell(2, 3) ' false

//C#
rgrid.CurrentWorksheet.IsValidCell(2, 2) //true
rgrid.CurrentWorksheet.IsValidCell(2, 3) //false

Проверка для всей объединенной ячейки (Check for whole merged cell)

Существует метод для определения всей ячейки, если известна её часть.

'VB
Dim outputRange As ReoGridRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange)

//C#
ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange);

Исключение RangeIntersectionException

Если попытаться объединить 2 и более ячеек, каждая из которых уже входит в состав своего объединения, то возникнет исключение RangeIntersectionException.

Пользовательский код позволяет отловить это исключение и прервать текущую операцию.

Метод CheckIntersectedMergingRange применяется для проверки принадлежности любой ячейки определённому диапазону. Этот метод помогает избегать указанное выше исключение.

'VB
Dim outputRange as ReoGridRange = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(inputRange)

//C#
ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(inputRange);

Если выражение outputRange.IsEmpty является истинным, то диапазон inputRange безопасен. Существует еще один метод, делающий то же самое.

'VB
Dim rs as boolean = rgrid.CurrentWorksheet.HasIntersectedMergingRange(inputRange)
MsgBox("Слияние ячеек")

//C#
bool rs = rgrid.CurrentWorksheet.HasIntersectedMergingRange(inputRange);
Interaction.MsgBox("Слияние ячеек");

Типы ячеек

Для использования встроенных типов ячеек нужно импортировать соответствующее пространство имён: unvell.ReoGrid.CellTypes

Ячейки в ReoGrid могут иметь основу, унаследованную от CellBody или реализованную через интерфейс ICellBody.

ReoGrid содержит следующие встроенные типы ячеек:

  • Кнопка (Button);
  • Гиперссылка (Hyperlink);
  • Флажок (Check Box);
  • Радиокнопка (Radio Button);
  • Раскрывающийся список (Drop-down list);
  • Картинка (Image);
  • Numeric Progress.

Формат ячеек

Для использования форматов данных нужно импортировать пространство имён unvell.ReoGrid.DataFormat

Указываем формат данных ячейки с помощью метода SetRangeDataFormat:

SetRangeDataFormat(Диапазон типа ReoGridRange, Флаг типа CellDataFormatFlag, Аргумент типа Object)

'VB
SetRangeDataFormat(Диапазон As ReoGridRange, Флаг As CellDataFormatFlag, Аргумент As Object)

//C#
SetRangeDataFormat(ReoGridRange диапазон, CellDataFormatFlag флаг, object аргумент);

Или применяем Действие
RGSetRangeDataFormatAction(Диапазон типа ReoGridRange, Формат типа CellDataFormatFlag, Аргумент типа object)

'VB
RGSetRangeDataFormatAction(Диапазон As ReoGridRange, Формат As CellDataFormatFlag, Аргументы As object)

//C#
RGSetRangeDataFormatAction(ReoGridRange Диапазон, CellDataFormatFlag Формат, object Аргумент)

Встроенные шаблоны форматирования данных

Тип CellDataFormatFlag Аргумент
Числовой (Number) CellDataFormatFlag.Number NumberDataFormatter.NumberFormatArgs
Дата/Время (DateTime) CellDataFormatFlag.DateTime DateTimeDataFormatter.DateTimeFormatArgs
Процентный (Percent) CellDataFormatFlag.Percent PercentDataFormatter.PercentFormatArgs
Денежный (Currency) CellDataFormatFlag.Currency CurrencyDataFormatter.CurrencyFormatArgs
Текстовый (Text) CellDataFormatFlag.Text Нет

Типы данных

Числовой (Number)

Устанавливаем для ячеек числовой формат данных:

'VB
Dim FFNum As New NumberDataFormatter.NumberFormatArgs
FFNum.DecimalPlaces = 4 'Количество знаков после запятой/точки: 0,1234
FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets 'стиль отрицательных чисел
FFNum.UseSeparator = True 'Использовать разделитель: 123,456
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Number, FFNum)

//C#
NumberDataFormatter.NumberFormatArgs FFNum = new NumberDataFormatter.NumberFormatArgs();
FFNum.DecimalPlaces = 4; //Количество знаков после запятой/точки: 0,1234
FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets; //стиль отрицательных чисел
FFNum.UseSeparator = true; //Использовать разделитель: 123,456
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Number, FFNum);

Дата/Время (DateTime)

'VB
Dim FFDT As New DateTimeDataFormatter.DateTimeFormatArgs
FFDT.CultureName = "ru-RU" 'Культура "ru-RU"
FFDT.Format = "dd/MM/yyyy" 'Шаблон 
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.DateTime, FFDT)

//C#
DateTimeDataFormatter.DateTimeFormatArgs FFDT = new DateTimeDataFormatter.DateTimeFormatArgs();
FFDT.CultureName = "ru-RU"; //Культура "ru-RU"
FFDT.Format = "dd/MM/yyyy"; //Шаблон
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.DateTime, FFDT);

Процентный (Percent)

'VB
Dim FFPer As New PercentDataFormatter.PercentFormatArgs
FFPer.DecimalPlaces = 2 'Количество знаков после запятой или точки
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer)

//C#
PercentDataFormatter.PercentFormatArgs FFPer = new PercentDataFormatter.PercentFormatArgs();
FFPer.DecimalPlaces = 2; //Количество знаков после запятой или точки
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer);

Денежный (Currency)

'VB
Dim FFCur As New CurrencyDataFormatter.CurrencyFormatArgs
FFCur.CultureEnglishName = "ru-RU" 'Культура "ru-RU"
FFCur.DecimalPlaces = 1 'Количество знаков после запятой/точки
FFCur.Symbol = "р." 'Символ р.
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Currency, FFCur)

//C#
CurrencyDataFormatter.CurrencyFormatArgs FFCur = new CurrencyDataFormatter.CurrencyFormatArgs();
FFCur.CultureEnglishName = "ru-RU"; //Культура "ru-RU"
FFCur.DecimalPlaces = 1; //Количество знаков после запятой/точки
FFCur.Symbol = "р."; //Символ р.
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Currency, FFCur);

Текстовый

'VB
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, Nothing)

//C#
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, null);

Формула (Formula)

Что следует учитывать при работе с формулами

  1. Данные в ячейке, начинающиеся с символа “=”, автоматически обрабатываются как формула.
  2. Значения ячеек с формулами автоматически обновляются при изменении значений в связанных с ними ячейках.
  3. Данные в ячейке, начинающиеся с символа (‘) не будут восприниматься как формула.
  4. Язык формул ReoGrid чувствителен к регистру, все функции, совместимыe с Microsoft Excel, должны указываться в ВЕРХНЕМ регистре, например SUM и AVERAGE, вызов функции и использованием имён вида “sum” приведёт к возникновению исключения ‘function not found’.

Ссылки на ячейки (References of Cell)

Как и Microsoft Excel, ReoGrid поддерживает ссылки на ячейку и диапазон.

Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3)

'VB
rgrid.CurrentWorksheet("H8") = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)"

//C#
rgrid.CurrentWorksheet("H8") == "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)";

Получение списка ссылок из ячейки

'VB
Dim rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8")

//C#
dynamic rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8");

Трассировка зависимостей (Trace Precedents)

Возможность трассировки зависимостей ячеек в формулах на манер Excel доступна с версии 0.8.6

Для включения трассировки, необходимо установить для параметра ячейки TraceFormulaPrecedent значение True:

'VB
rgrid.CurrentWorksheet("C2") = 10
rgrid.CurrentWorksheet("C3") = 5
Dim cell As ReoGridCell = rgrid.CurrentWorksheet.Cells("C5")
cell.Formula = "=C2+C3"
cell.TraceFormulaPrecedents = True

'или путём вызова TraceCellPrecedents:
rgrid.CurrentWorksheet.TraceCellPrecedents("C5")

//C#
rgrid.CurrentWorksheet("C2") = 10;
rgrid.CurrentWorksheet("C3") = 5;
ReoGridCell cell = rgrid.CurrentWorksheet.Cells("C5");
cell.Formula = "=C2+C3";
cell.TraceFormulaPrecedents = true;

//или путём вызова TraceCellPrecedents:
rgrid.CurrentWorksheet.TraceCellPrecedents("C5");

При изменении формулы трассирующие стрелки исчезнут. Следующий код позволит постоянно отображать трассирующие стрелки:

'VB
'Добавляем обработчик события
AddHandler rGrid.CellDataChanged, AddressOf rgrid_CellDataChanged

Sub rgrid_CellDataChanged(ByVal sender As Object, ByVal e As unvell.ReoGrid.Events.CellEventArgs)
e.Cell.TraceFormulaPrecedents = True
End Sub

//C#
rgrid.CellDataChanged += (s, e) => e.Cell.TraceFormulaPrecedents = true;

Трассировка зависимостей (Trace Dependents)

Определение именованного диапазона

'VB
Dim namedRange As NamedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2")

//C#
NamedRange namedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2");

Установка значений именованного диапазона

'VB
namedRange.Data = New Object() {1, 3, 5, 7}

//C#
namedRange.Data == new object[] {1,3,5,7}

Применение формулы суммирования к именованному диапазону

'VB
rgrid.CurrentWorksheet("F2") = "=SUM(items)"

//C#
rgrid.CurrentWorksheet("F2") == "=SUM(items)";

Часть 2