Мини-учебник по Reogrid 0.8.8.4. Часть 1

Windows Form и WPF

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

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

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

Первое подключение 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 содержит следующие встроенные типы ячеек:

Формат ячеек

Для использования форматов данных нужно импортировать пространство имён 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.NumberNumberDataFormatter.NumberFormatArgs
Дата/Время (DateTime)CellDataFormatFlag.DateTimeDateTimeDataFormatter.DateTimeFormatArgs
Процентный (Percent)CellDataFormatFlag.PercentPercentDataFormatter.PercentFormatArgs
Денежный (Currency)CellDataFormatFlag.CurrencyCurrencyDataFormatter.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)";