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
- Копируем библиотеки компонента в папку Debug / Release вашего проекта (выбранную редакцию).
- В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
- В свойствах панели элементов управления выбираем пункт “Выбрать компоненты”, указываем на библиотеку Reogrid и выбираем подключаемые компоненты. Для неанглоязычного интерфейса подойдёт лишь сам табличный элемент управления, так как остальные не поддерживают локализацию.
- Если всё сделано верно, то в панели элементов управления появится Reogrid.
Обновление Reogrid
- Переходим к свойствам проекта. В разделе “Ссылки” отключаем все библиотеки Reogrid.
- Из папки проекта Debug / Release вашего проекта удаляем файлы устаревшей сборки Reogrid.
- Копируем файлы новой версии в папку Debug / Release вашего проекта.
- В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
- Пересобираем проект.
Настройка компонента
Далее подразумевается, что в проект добавлен компонент 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)
Что следует учитывать при работе с формулами
- Данные в ячейке, начинающиеся с символа “=”, автоматически обрабатываются как формула.
- Значения ячеек с формулами автоматически обновляются при изменении значений в связанных с ними ячейках.
- Данные в ячейке, начинающиеся с символа (‘) не будут восприниматься как формула.
- Язык формул 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)";