Windows Form и WPF

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

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

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

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

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

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

Настройка таблицы

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

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

		rgrid.SetSettings(Параметр типа ReoGridSettings, Значение типа Boolean)
		Значение = True включает параметр
		Значение = False выключает параметр
		
		'VB
		rgrid.SetSettings(Параметр As ReoGridSettings, Значение As Boolean)
		
		//C#
		rgrid.SetSettings(ReoGridSettings Параметр, Bool Значение)
		
		'Выключение параметра ReoGridSettings.View_ShowScrolls
		rgrid.SetSettings(Параметр, False)
		
		Пример
		rgrid.SetSettings(ReoGridSettings.View_ShowScrolls, False)
        
		Выключение сразу двух параметров
		
		'VB
		rgrid.SetSettings(Параметр1 As ReoGridSettings Or Параметр2 As ReoGridSettings, False)
		
		//C#
		rgrid.SetSettings(ReoGridSettings Параметр1 | ReoGridSettings Параметр2, False);
		

Только включение параметра

		'VB
		rgrid.EnableSettings(Параметр As ReoGridSettings)
		
		//C#
		rgrid.EnableSettings(ReoGridSettings Параметр);
		

Только выключение параметра

		'VB
		rgrid.DisableSetting(Параметр As ReoGridSettings)

		//C#
		rgrid.DisableSetting(ReoGridSettings Параметр);
		

Получение факта включения параметра

		'VB
		Dim value As Boolean = rgrid.HasSetting(Параметр As ReoGridSettings)

		//C#
		bool value = rgrid.HasSetting(ReoGridSettings Параметр);
		

Параметры таблицы

В данной таблице приведены параметры, которые можно включать и выключать указанными выше способами

Параметр Описание
ReoGridSettings.Behavior_AllВсе параметры с префиксом Behavior
ReoGridSettings.Behavior_AutoPickingCellAddressРазрешить выбирать адрес из выделенной ячейки в процессе правки формулы
ReoGridSettings.Behavior_MouseWheelToScrollРазрешить прокрутку таблицы колесом мыши
ReoGridSettings.Behavior_MouseWheelToZoomРазрешить пользователю масштабировать таблицу колесом мыши
ReoGridSettings.Behavior_ShortcutKeyToZoomРазрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus)
ReoGridSettings.Behavior_AllowUserPageBreaksРазрешить пользователю вставлять или настраивать разрывы страниц с помощью мыши
Правка
ReoGridSettings.Edit_ReadonlyЭлемент управления будет работать в режиме "Только для чтения". Внесение каких-либо изменений запрещено
ReoGridSettings.Edit_AutoFormatCellРазрешить форматировать данные после правки текста пользователем
ReoGridSettings.Edit_FriendlyPercentInputРазрешить отображение сомвола "процент" при вводе пользоателем значения ячейки с "процентным" форматом данных
ReoGridSettings.Edit_AutoAdjustRowHeightРазрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта
ReoGridSettings.Edit_AllowAdjustRowHeightРазрешить пользователю настраивать высоту строк с помощью мыши
ReoGridSettings.Edit_AllowAdjustColumnWidthРазрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием)
Отображение, внешний вид
ReoGridSettings.View_ShowColumnHeaderПоказывать заголовки столбцов
ReoGridSettings.View_ShowRowHeaderПоказывать заголовки строк
ReoGridSettings.View_ShowXRulerПоказывать горизонтальную линейку (зарезервировано)
ReoGridSettings.View_ShowYRulerПоказывать вертикальную линейку (зарезервировано)
ReoGridSettings.View_ShowGridLineПоказывать линии сетки
ReoGridSettings.View_ShowScrollsПоказывать полосы прокрутки
ReoGridSettings.View_ShowHorScrollПоказывать горизонтальную полосу прокрутки
ReoGridSettings.View_ShowVerScrollПоказывать вертикальную полосу прокрутки
ReoGridSettings.View_AllowShowRowOutlinesРазрешить показывать внешние границы строк, если они не замкнуты (outlines exiting)
ReoGridSettings.View_AllowShowColumnOutlinesРазрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting)
ReoGridSettings.View_MouseWheelToScrollРазрешить прокрутку листа колесом мыши
ReoGridSettings.View_ShowPrintAreasВключить отображение областей печати для печатаемых областей
Выполнение сценариев / Script Execution
ReoGridSettings.Script_AutoRunOnloadРазрешить автозапуск сценария после загрузки таблицы из потока
ReoGridSettings.Script_PromptBeforeAutoRunПоказывать ли сообщение, подсказывающее пользователю о запуске сценария, когда сценарий загружен из потока.

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

СобытиеКогда возникает
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При возникновении ошибок в процессе операции вставки

Основные действия с таблицей

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

	'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");
		

Поддерживаемые встроенные функции

ФункцияОписание
INDIRECTВозвращает ссылку, заданную текстовой строкой
ADDRESSВозвращает ядрес ячейки на листе
COUNTВозвращает количество ячеек, содержащих числа, и подсчитывает числа в списке аргументов
COUNTIFВозвращает количество ячеек в заданном диапазоне, которые отвечают единому заданному критерию
SUMВозвращает сумму значений чисел. Пример: SUM(B11:E12)
SUMIFВозвращает сумму значений в диапазоне, которые соответствуют указанным критериям
AVERAGEВозвращает среднее арифметическое значение указанных аргументов
LOOKUPВозвращает значение либо из одной строки, либо одного столбца диапазона или массива
ROWSВозвращает количество строк в ссылке (reference) или массиве
COLUMNSВозвращает количество столбцов в ссылке (reference) или массиве
INDEXВозвращает значение или ссылку (reference) на значение из таблицы или диапазона ячеек
CEILINGВозвращает число, округляемое в сторону увеличения, от нуля до ближайшего кратного указанному значению
LENВозвращает количество символов в текстовой строке
LENBВозвращает количество байт, используемых для представления знаков в текстовой строке
ROUNDОкругление числа до ближайшего значения. Примеры: ROUND(B8), ROUND(E8, 2)

Трассировка зависимостей (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)";