Reogrid поддерживает технологии Windows Form и WPF. Поэтому в архиве с файлами компонента приведено два варианта компонента: WPF-версия содержит эти три буквы в названии папки.
Компонент Reogrid доступен в четырёх основных редакциях:
Далее подразумевается, что в проект добавлен компонент 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, существуют параметры для всей книги и для отдельных её листов
'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 | Показывать ли сообщение, подсказывающее пользователю о запуске сценария, когда сценарий загружен из потока. |
'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 | Когда фокус переходит к другой ячейке |
Событие | Когда возникает |
---|---|
OutlineAdded | Когда в таблицу добавлена внешняя граница |
OutlineRemoved | Когда внешняя граница удалена из таблицы |
BeforeOutlineCollapse | Когда пользователь щёлкает на кнопке "-" за пределами таблицы - для её сворачивания |
AfterOutlineCollapse | Когда граница замкнулась |
BeforeOutlineExpand | Когда пользователь щёлкает на кнопке "+" за пределами таблицы - для её разворачивания |
AfterOutlineExpand | Когда внешняя граница развёрнута |
Событие | Когда возникает |
---|---|
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 | При возникновении ошибок в процессе операции вставки |
Начиная с версии 0.8.8, Reogrid имеет повышенную совместимость с форматом Excel 2007 (xlsx): возможно как считывание данных, так и их запись. При этом поддерживаются основные стили оформления ячеек.
Теперь основной объект Reogrid представляет собой не отдельную таблицу, а книгу (Workbook), которая может состоять из вложенных листов с таблицми (WorkSheets). Для переключения таблиц служит встроенный отключаемый вкладочный элемент (Tabcontrol). Активный лист имеет псевдоним CurrentWorkSheet, который активно используется во второй части данного руководства.
Функция 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 | Логическое ИЛИ |
Загрузка данных из файла
'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[,Кодировка]);
Поддерживаемые особенности:
'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))
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
Объединенная ячейка имеет два свойства, которые используются для определения того, сколько ячеек было объединено:
Ячейка в позиции 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
Существует метод для определения всей ячейки, если известна её часть.
'VB Dim outputRange As ReoGridRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange) //C# ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange);
Если попытаться объединить 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.Number | NumberDataFormatter.NumberFormatArgs |
Дата/Время (DateTime) | CellDataFormatFlag.DateTime | DateTimeDataFormatter.DateTimeFormatArgs |
Процентный (Percent) | CellDataFormatFlag.Percent | PercentDataFormatter.PercentFormatArgs |
Денежный (Currency) | CellDataFormatFlag.Currency | CurrencyDataFormatter.CurrencyFormatArgs |
Текстовый (Text) | CellDataFormatFlag.Text | Нет |
Устанавливаем для ячеек числовой формат данных:
'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);
'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);
'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);
'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);
Как и 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");
Возможность трассировки зависимостей ячеек в формулах на манер 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;
'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)";