Windows Form и WPF
Reogrid поддерживает технологии Windows Form и WPF. Поэтому в архиве с файлами компонента приведено два варианта компонента: WPF-версия содержит эти три буквы в названии папки.
Начиная с версии 0.8.9, все редакции Reogrid поддерживают клиентский профиль (.NET client profile). Код примеров данного руководства выполнялся в .NET client profile 4.
Бесплатное и платное издания
Начиная с версии 0.8.9, Reogrid имеет как бесплатное (Free), так и платное (Pro) издания. Бесплатное содержит весь функционал версий по 0.88 (основной набор функций). Платное издание содержит новые функции и возможности, а также подписку на техническую поддержку сроком в 3 месяца. Список с указанием отличий доступен на официальном сайте.
Выбор редакции
Компонент Reogrid доступен в нескольких редакциях:
- Минимальная (Minimum или WPFMinimum) – содержит лишь библиотеку unvell.ReoGrid.dll. Доступны все основные функции.
- Стандартная (Release) – все основные функции и вычисление формул
- Расширенная (Extension или WPFExtension). Помимо указанных выше, содержит библиотеки для работы со сценариями: unvell.ReoScript.dll иunvell.ReoScript.EditorLib.dll. Также в состав этой редакции входят два сторонних компонента: Antlr3.Runtime.dll и FastColoredTextBox.dll (Windows Form).
- Стандартная Про (Release Pro) и Расширенная Про (Extension Pro) кроме тех же функций и возможностей, что содержат одноимённые редакции без пристаки “Про”, содержат кое-что ещё – с полным списком отличий можно ознакомиться на официальном сайте проекта.
Первое подключение Reogrid
- Копируем библиотеки компонента в папку Debug и/или Release вашего проекта.
- В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
- В свойствах панели элементов управления выбираем пункт “Выбрать компоненты”, указываем на библиотеку Reogrid и выбираем подключаемые компоненты.
- Если всё сделано верно, то в панели элементов управления появится Reogrid.
Обновление Reogrid
- Переходим к свойствам проекта. В разделе “Ссылки” удаляем все ссылки на библиотеки Reogrid.
- Из папки проекта Debug и/или Release вашего проекта удаляем файлы устаревшей сборки Reogrid.
- Копируем файлы новой версии в папку Debug / Release вашего проекта.
- В свойствах проекта, разделе “Ссылки” добавляем ссылки на библиотеки Reogrid.
- Пересобираем проект (в главном меню пункт ПОСТРОЕНИЕ – Перестроить Название проекта. ).
Рассмотрим основные моменты работы с компонентом на конкретных примерах. То есть, на основе рассмотренных ниже фрагментов кода можно собрать работоспособный редактор таблиц. Изначально подразумевается, что на форму добавлен компонент Reogrid с именем rgrid.
Необходимые пространства имён (Namespaces)
Для создания редактора редактора электронных таблиц будет достаточно подключить следующие пространства имён:
- System.IO – для работы с файловой системой
- System.Text – для работы с кодировками текста
- unvell.ReoGrid – сам компонент
- unvell.ReoGrid.CellTypes – типы данных ячеек (кнопка, флажок)
- unvell.ReoGrid.Actions – действия
- unvell.ReoGrid.DataFormat – форматы данных (дата, проценты, текст)
- unvell.ReoGrid.Print – функции печати
- unvell.ReoGrid.Chart – диаграммы
'VB Imports System.IO Imports System.Text Imports unvell.ReoGrid Imports unvell.ReoGrid.CellTypes Imports unvell.ReoGrid.Actions Imports unvell.ReoGrid.DataFormat Imports unvell.ReoGrid.Print Imports unvell.ReoGrid.Chart
//C# using System.IO; using System.Text; using unvell.ReoGrid; using unvell.ReoGrid.CellTypes; using unvell.ReoGrid.Actions; using unvell.ReoGrid.DataFormat; using unvell.ReoGrid.Print; using System; using System.Windows.Forms; using System.Drawing; using unvell.ReoGrid.Chart;
Первые шаги
Терминология, необходимая для работы с Reogrid, во многом аналогична таковой у Microsoft Excel. Здесь также присутствуют: Книги (Workbooks), Листы (WorkSheets), ячейки (Cells). В ячейках так же можно хранить как значения в основных форматах (текстовом, числовом, денежном, …), так и формулы с использованием ряда функций, которые обычно совместимы со своими аналогами из английской версии Excel.
Экземпляр компонента (он же экземпляр класса IWorkbook) изначально содержит один Лист. Он доступен по псевдониму CurrentWorksheet (текущий лист).
Далее подразумевается, что в основную форму проекта (Windows Forms) добавлен экземпляр компонента Reogrid с именем rgrid.
Новые листы книги могут создаваться как визуально – c использованием встроенного в Reogrid вкладочного элемента (TabControl), так и программно – путём создания экземпляра объекта WorkSheet с последующим его добавлением в состав книги.
Примеры манипулирования листами книги.
'VB 'Сброс книги (удаление всех листов и создание пустого нового) rgrid.Reset() 'Создание экземпляра листа с именем по умолчанию Dim sheet As Worksheet = rgrid.CreateWorksheet() 'или с указанным именем Dim sheet1 As Worksheet = rgrid.CreateWorksheet("Мой_лист") 'Добавление листа в книгу в конец или с уточнением позиции rgrid.AddWorksheet(sheet) rgrid.InsertWorksheet(1, sheet) 'или rgrid.Worksheets.Add(sheet) rgrid.Worksheets.Insert(1, sheet) 'Определение количества листов в книге Dim mycount As Integer = rgrid.Worksheets.Count 'Удаление листа с указанием экземпляра rgrid.Worksheets.Remove(sheet) 'или rgrid.RemoveWorksheet(sheet) 'или же с указанием позиции листа rgrid.RemoveWorksheet(1) 'Копирование листа Dim sheet2 As Worksheet = rgrid.CopyWorksheet(0, 1) 'Перемещение листа rgrid.MoveWorksheet(0, 3) 'Сброс листа (удаление всех данных) rgrid.CurrentWorksheet.Reset()
//C# //Сброс книги (удаление всех листов и создание пустого нового) rgrid.Reset(); //Создание экземпляра листа с именем по умолчанию Worksheet sheet = rgrid.CreateWorksheet(); //или с указанным именем Worksheet sheet1 = rgrid.CreateWorksheet("Мой_лист"); //Добавление листа в книгу в конец или с уточнением позиции rgrid.AddWorksheet(sheet); rgrid.InsertWorksheet(1, sheet); //или rgrid.Worksheets.Add(sheet); rgrid.Worksheets.Insert(1, sheet); //Определение количества листов в книге int mycount = rgrid.Worksheets.Count; //Удаление листа с указанием экземпляра rgrid.Worksheets.Remove(sheet); //или rgrid.RemoveWorksheet(sheet); //или же с указанием позиции листа rgrid.RemoveWorksheet(1); //Копирование листа Worksheet sheet2 = rgrid.CopyWorksheet(0, 1); //Перемещение листа rgrid.MoveWorksheet(0, 3); //Сброс листа (удаление всех данных) rgrid.CurrentWorksheet.Reset();
Основные (простые) действия над ячейками и диапазонами ячеек.
'VB 'Занесение значения в ячейку rgrid.CurrentWorksheet(1, 1) = "Какой-то текст" rgrid.CurrentWorksheet("B2") = "Какой-то текст" 'Получение данных из ячейки (текст) Dim strText As String = rgrid.CurrentWorksheet(1, 1).ToString Dim strText1 As String = rgrid.CurrentWorksheet.Cells(1, 1).DisplayText 'Ввод и получение текстового представления формулы rgrid.CurrentWorksheet.Cells(1, 1).Formula = "=A8+B8" Dim strFormula As String = rgrid.CurrentWorksheet.Cells(1, 1).Formula 'Установка цвета фона (как пример изменения оформления ячейки) rgrid.CurrentWorksheet.Cells("E5").Style.BackColor = Color.LightYellow 'Задание имени диапазона Dim myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4) 'Запись данных в диапазон myRange.Data = New Object(,) {{1, 2, 3, 4}, {0.1, 0.2, 0.3, 0.4}, {"яблоко", "банан", "апельсин", "груша"}} 'Задание ширины столбца rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100) 'Изменяем ширину заголовка rgrid.CurrentWorksheet.ColumnHeaders(0).Width = 100 'Столбец A rgrid.CurrentWorksheet.ColumnHeaders(1).Width = 500 'Столбец B
//C# //Занесение значения в ячейку rgrid.CurrentWorksheet[1, 1] = "Какой-то текст"; rgrid.CurrentWorksheet["B2"] = "Какой-то текст"; //Получение данных из ячейки (текст) string strText1 = rgrid.CurrentWorksheet.Cells[1, 1].DisplayText; //Ввод и получение текстового представления формулы rgrid.CurrentWorksheet.Cells[1, 1].Formula = "=A8+B8"; string strFormula = rgrid.CurrentWorksheet.Cells[1, 1].Formula; //Установка цвета фона (как пример изменения оформления ячейки) rgrid.CurrentWorksheet.Cells["E5"].Style.BackColor = Color.LightYellow; //Задание имени диапазона var myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4); //Запись данных в диапазон myRange.Data = new object[, ] {{1,2,3,4},{0.1,0.2,0.3,0.4},{"яблоко","банан","апельсин","груша"}}; //Задание ширины столбца rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100); //Изменяем ширину заголовка rgrid.CurrentWorksheet.ColumnHeaders[0].Width = 100; //Столбец A rgrid.CurrentWorksheet.ColumnHeaders[1].Width = 500; //Столбец B
Типы ячеек (Cell Types)
Для использования встроенных типов ячеек нужно импортировать соответствующее пространство имён: unvell.ReoGrid.CellTypes
Ячейки в ReoGrid могут иметь основу, унаследованную от CellBody или реализованную через интерфейс ICellBody.
ReoGrid содержит следующие встроенные типы ячеек:
- Кнопка (Button);
- Гиперссылка (Hyperlink);
- Флажок (Check Box);
- Радиокнопка (Radio Button);
- Раскрывающийся список (Drop-down list);
- Картинка (Image);
- Индикатор выполнения (Numeric Progress).
Ячейка таблицы может быть дополнительно представлена активным элементом управления.
Кнопка (Button)
'VB '1. Самый простой вариант кнопки (Button) rgrid.CurrentWorksheet(1, 1) = New ButtonCell() rgrid.CurrentWorksheet(1, 1) = "Привет" '2. Кнопка с обработчиком события нажатия (Click) Dim btn As ButtonCell = New ButtonCell("Привет!") rgrid.CurrentWorksheet(1, 1) = New Object() {"Кнопка: ", btn} 'AddHandler btn.Click, AddressOf btn_Click 'Sub btn_Click(ByVal s, ByVal e) 'MsgBox("Кнопка нажата") 'End Sub
//C# //1. Самый простой вариант кнопки (Button) rgrid.CurrentWorksheet[1, 1] = new ButtonCell(); rgrid.CurrentWorksheet[1, 1] = "Привет"; //2. Кнопка с обработчиком события нажатия (Click) ButtonCell btn = new ButtonCell("Привет!"); rgrid.CurrentWorksheet[1, 1] = new object[] {"Кнопка: ",btn}; /*btn.Click += btn_Click; public void btn_Click(s, e) { Interaction.MsgBox("Кнопка нажата"); }*/
Гиперссылка (Hyperlink)
Гиперссылка использует данные ячейки как адрес URL.
'VB '1. Делаем гиперссылкой выделенный диапазон. rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = New HyperlinkCell("https://reogrid.net/ru", False) '2. Настройка всех основных параметров с последующим применением к нужной ячейке. Dim MyLink As New HyperlinkCell MyLink.LinkColor = Color.Blue MyLink.ActivateColor = Color.Green MyLink.VisitedColor = Color.Red MyLink.LinkURL = "http://yandex.ru" MyLink.AutoNavigate = True rgrid.CurrentWorksheet(1, 2) = MyLink 'Если по щелчку на гиперссылке должен происходить переход, то можно применить приведённый ниже код. Объявление переменной-гиперссылки может потребоваться перенести в область объявления переменной на уровне класса формы Dim link = New HyperlinkCell("https://reogrid.net/ru") rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = New Object() {"Гиперссылка", link} 'AddHandler link.Click, AddressOf link_Click 'Sub link_Click(ByVal s, ByVal e) 'System.Diagnostics.Process.Start(rgrid.GetCellText(1, 2)) 'End Sub
//C# //1. Делаем гиперссылкой выделенный диапазон. rgrid.CurrentWorksheet[rgrid.CurrentWorksheet.SelectionRange] = new HyperlinkCell("https://reogrid.net/ru", false); //2. Настройка всех основных параметров с последующим применением к нужной ячейке. HyperlinkCell MyLink = new HyperlinkCell(); MyLink.LinkColor = Color.Blue; MyLink.ActivateColor = Color.Green; MyLink.VisitedColor = Color.Red; MyLink.LinkURL = "http://yandex.ru"; MyLink.AutoNavigate = true; rgrid.CurrentWorksheet[1, 2] = MyLink; //Если по щелчку на гиперссылке должен происходить переход, то можно применить приведённый ниже код. Объявление переменной-гиперссылки может потребоваться перенести в область объявления переменной на уровне класса формы var link = new HyperlinkCell("https://reogrid.net/ru"); rgrid.CurrentWorksheet[rgrid.CurrentWorksheet.SelectionRange] = new object[] {"Гиперссылка",link}; //link.Click += link_Click; /*public void link_Click(s, e) { System.Diagnostics.Process.Start(rgrid.GetCellText(1, 2)); }*/
Флажок (CheckBox)
Для этой процедуры рекомендуется использовать таблицу без объединённых ячеек 😉 Сам Флажок занимает одну ячейку, поясняющую надпись к нему нужно располагать с другой ячейке.
'VB Dim middleStyle = New WorksheetRangeStyle 'ReoGridStyleObject middleStyle.Flag = PlainStyleFlag.Padding middleStyle.Flag = PlainStyleFlag.HorizontalAlign middleStyle.Padding = New unvell.ReoGrid.PaddingValue(2) middleStyle.HAlign = ReoGridHorAlign.Center Dim grayTextStyle = New WorksheetRangeStyle grayTextStyle.Flag = PlainStyleFlag.TextColor grayTextStyle.TextColor = Color.DimGray Dim checkbox As CheckBoxCell = New CheckBoxCell() rgrid.CurrentWorksheet.SetRangeStyles(7, 2, 1, 1, middleStyle) rgrid.CurrentWorksheet.SetRangeStyles(8, 2, 1, 1, grayTextStyle) rgrid.CurrentWorksheet(7, 1) = New Object() {"Флажок", checkbox, "Напомнить через 5 минут"} rgrid.CurrentWorksheet(8, 2) = "(Изменить состояние элемента управления можно и при помощи клавиатуры)" 'Пример создания обработчика. Для его работы может потребоваться объявление переменной checkbox на уровне класса 'AddHandler checkbox.CheckChanged, AddressOf checkbox_CheckChanged 'Sub checkbox_CheckChanged(ByVal sender, ByVal e) 'MsgBox("Флажок переведён в состояние " & checkbox.ButtonState.ToString()) 'End Sub
//C# var middleStyle = new WorksheetRangeStyle(); middleStyle.Flag = PlainStyleFlag.Padding; middleStyle.Flag = PlainStyleFlag.HorizontalAlign; middleStyle.Padding = new unvell.ReoGrid.PaddingValue(2); middleStyle.HAlign = ReoGridHorAlign.Center; dynamic grayTextStyle = new WorksheetRangeStyle(); grayTextStyle.Flag = PlainStyleFlag.TextColor; grayTextStyle.TextColor = Color.DimGray; CheckBoxCell checkbox = new CheckBoxCell(); rgrid.CurrentWorksheet.SetRangeStyles(7, 2, 1, 1, middleStyle); rgrid.CurrentWorksheet.SetRangeStyles(8, 2, 1, 1, grayTextStyle); rgrid.CurrentWorksheet[7, 1] = new object[] {"Флажок",checkbox, "Напомнить через 5 минут"}; rgrid.CurrentWorksheet[8, 2] = "(Изменить состояние элемента управления можно и при помощи клавиатуры)"; //Пример создания обработчика. Для его работы может потребоваться объявление переменной checkbox на уровне класса //checkbox.CheckChanged += checkbox_CheckChanged; /*public void checkbox_CheckChanged(sender, e) { Interaction.MsgBox("Флажок переведён в состояние " + checkbox.ButtonState.ToString()); }*/
Радиокнопка (RadioButton)
Как и флажки, радиокнопки занимают одну ячейку. Назовём ячейку с радиокнопкой радиоячейкой. После добавления радиоячеек в группу, они начинают работать вместе (может быть выбрана только одна радиокнопка)
'VB rgrid.CurrentWorksheet(0, 1) = "Радиокнопки" 'Группа Dim radioGroup As RadioButtonGroup = New RadioButtonGroup() 'Объявление ячеек и подключение их к группе Dim rr1 As RadioButtonCell = New RadioButtonCell rr1.RadioGroup = radioGroup Dim rr2 As RadioButtonCell = New RadioButtonCell rr2.RadioGroup = radioGroup Dim rr3 As RadioButtonCell = New RadioButtonCell rr3.RadioGroup = radioGroup 'Применяем к таблице rgrid.CurrentWorksheet(1, 1) = rr1 rgrid.CurrentWorksheet(2, 1) = rr2 rgrid.CurrentWorksheet(3, 1) = rr3 'Ну и добавляем пояснения для пользователя rgrid.CurrentWorksheet(1, 2) = "Яблоко" rgrid.CurrentWorksheet(2, 2) = "Апельсин" rgrid.CurrentWorksheet(3, 2) = "Банан"
//C# rgrid.CurrentWorksheet[0, 1] = "Радиокнопки"; //Группа RadioButtonGroup radioGroup = new RadioButtonGroup(); //Объявление ячеек и подключение их к группе RadioButtonCell rr1 = new RadioButtonCell(); rr1.RadioGroup = radioGroup; RadioButtonCell rr2 = new RadioButtonCell(); rr2.RadioGroup = radioGroup; RadioButtonCell rr3 = new RadioButtonCell(); rr3.RadioGroup = radioGroup; //Применяем к таблице rgrid.CurrentWorksheet[1, 1] = rr1; rgrid.CurrentWorksheet[2, 1] = rr2; rgrid.CurrentWorksheet[3, 1] = rr3; //Ну и добавляем пояснения для пользователя rgrid.CurrentWorksheet[1, 2] = "Яблоко"; rgrid.CurrentWorksheet[2, 2] = "Апельсин"; rgrid.CurrentWorksheet[3, 2] = "Банан";
Раскрывающийся список (Drop-down List)
При выборе пункта он обновляет данные в своей ячейке. Получить выбранный пункт можно в обработчике события CellDataChanged:
'VB Dim mydropdown As New DropdownListCell("Яблоко", "Апельсин", "Банан", "Груша", "Тыква", "Вишня", "Кокос") rgrid.CurrentWorksheet(2, 3) = New Object() {"Список:", mydropdown}
//C# DropdownListCell mydropdown = new DropdownListCell( "Яблоко","Апельсин","Банан","Груша","Тыква","Вишня","Кокос" ); rgrid.CurrentWorksheet[2, 3] = new object[] {"Список:", mydropdown};
Картинка (Image)
В ячейку помещается графическое изображение
Свойство ImageCell ViewMode позволяет управлять отображением картинки в ячейке:
'VB 'Загрузка из файла Dim image1 As Image = Image.FromFile("D:\myinfo\photo.png") rgrid.CurrentWorksheet(1, 2) = New ImageCell(image1) 'Получение из ресурсов rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo) 'или rgrid.CurrentWorksheet("B3") = New ImageCell(My.Resources.photo) 'Создаём ImageCell с указанием параметра отображения Dim img As Image = Image.FromFile("D:\myinfo\photo.png") Dim imgCell As ImageCell = New ImageCell(img, ImageCellViewMode.Zoom) rgrid.CurrentWorksheet("B3") = imgCell 'Также можно указать значение напрямую imgCell.ViewMode = ImageCellViewMode.Clip 'И даже можно задать параметры выравнивания по вертикали и горизонтали: Dim cell = rgrid.CurrentWorksheet.Cells("F6") cell.Style.HAlign = ReoGridHorAlign.Center cell.Style.VAlign = ReoGridVerAlign.Middle 'Ещё варианты rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Clip) rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Stretch) rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Zoom)
//C# //Загрузка из файла Image image1 = Image.FromFile("D:\\myinfo\\photo.png"); rgrid.CurrentWorksheet[1, 2] = new ImageCell(image1); //Получение из ресурсов rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo); //или rgrid.CurrentWorksheet["B3"] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo); //Создаём ImageCell с указанием параметра отображения Image img = Image.FromFile("D:\\myinfo\\photo.png"); ImageCell imgCell = new ImageCell(img, ImageCellViewMode.Zoom); rgrid.CurrentWorksheet["B3"] = imgCell; //Также можно указать значение напрямую imgCell.ViewMode = ImageCellViewMode.Clip; //И даже можно задать параметры выравнивания по вертикали и горизонтали: var cell = rgrid.CurrentWorksheet.Cells["F6"]; cell.Style.HAlign = ReoGridHorAlign.Center; cell.Style.VAlign = ReoGridVerAlign.Middle; //Ещё варианты rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Clip); rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Stretch); rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Zoom);
Индикатор выполнения (Numeric Progress)
Позволяет отобразить результат выполнения какого-либо задания или его этапа.
'VB Dim pc As ProgressCell = New ProgressCell pc.TopColor = Color.Aqua pc.BottomColor = Color.Black rGrid.CurrentWorksheet(7, 2) = 0.8 rgrid.CurrentWorksheet(7, 2) = pc
//C# ProgressCell pc = new ProgressCell(); pc.TopColor = Color.Aqua; pc.BottomColor = Color.Black; rgrid.CurrentWorksheet[7, 2] = 0.8; rgrid.CurrentWorksheet[7, 2] = pc;
Формат ячеек
Для использования форматов данных нужно импортировать пространство имён unvell.ReoGrid.DataFormat
Указываем формат данных ячейки с помощью метода SetRangeDataFormat:
Встроенные шаблоны форматирования данных
Тип | 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 'Числовой формат данных (Number) 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) 'Дата/Время (DateTime) 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) 'Процентный (Percent) Dim FFPer As New NumberDataFormatter.NumberFormatArgs FFPer.DecimalPlaces = 2 'Количество знаков после запятой или точки rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer) 'Денежный (Currency) 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) 'Текстовый (Text) rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, Nothing)
//C# //Числовой формат данных (Number) 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) 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) NumberDataFormatter.NumberFormatArgs FFPer = new NumberDataFormatter.NumberFormatArgs(); FFPer.DecimalPlaces = 2; //Количество знаков после запятой или точки rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer); //Денежный (Currency) 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); //Текстовый (Text) rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, null);
Инициализация списков
Этот фрагмент кода можно включить в состав процедуры Form_Load
Управление параметрами книги или листа
Существуют параметры для всей книги и для отдельных её листов. Для управления параметром существует три метода: универсальный (нужно указать параметр типаWorkbookSettings для книги, WorksheetSettings для листа, а также булевое значение: True = включить, False = выключить), включение и выключение. Для последних вариантов в скобках нужно указать включаемый или отключаемый параметр типа WorkbookSettings или WorksheetSettings.
Узнать значение параметра можно с помощью метода HasSetting
Параметры книги (WorkbookSettings) и листа (WorksheetSettings).
Варианты включения и выключения параметров, получение состояния параметра, а также комбинирование параметров. В качестве примера взят параметр WorkbookSettings.View_ShowSheetTabControl
'VB '1. Книга rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, True) 'Универсальный (True - включение, False - выключение) rgrid.EnableSettings(WorkbookSettings.View_ShowSheetTabControl) 'Включение rgrid.DisableSettings(WorkbookSettings.View_ShowSheetTabControl) 'Выключение Dim bBook As Boolean = rgrid.HasSettings(WorkbookSettings.View_ShowSheetTabControl) 'Получаем текущее значение параметра '2. Лист rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default, True) 'Универсальный вариант rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.Behavior_Default) 'Включение rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_Default) 'Выключение Dim bSheet As Boolean = rgrid.CurrentWorksheet.HasSettings(WorksheetSettings.Behavior_Default) 'Получаем текущее значение параметра rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default Or WorksheetSettings.Edit_Readonly, False) 'Выключение сразу двух параметров
//C# //1. Книга rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, true); //Универсальный (true - включение, false - выключение) rgrid.EnableSettings(WorkbookSettings.View_ShowSheetTabControl); //Включение rgrid.DisableSettings(WorkbookSettings.View_ShowSheetTabControl); //Выключение bool bBook = rgrid.HasSettings(WorkbookSettings.View_ShowSheetTabControl); //Получаем текущее значение параметра //2. Лист rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default, true); //Универсальный вариант (true - включение, false - выключение) rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.Behavior_Default); //Включение rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_Default); //Выключение bool bSheet = rgrid.CurrentWorksheet.HasSettings(WorksheetSettings.Behavior_Default); //Получаем текущее значение параметра rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default | WorksheetSettings.Edit_Readonly, false);//Выключение сразу двух параметров
Пример настройки книги и листа с пояснениями в комментариях
'VB 'Включаем все параметры книги rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, True) 'Показывать вкладки-листы rgrid.SetSettings(WorkbookSettings.View_ShowScrolls, True) 'Показывать полосы прокрутки rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, True) 'Показывать горизонтальную полосу прокрутки rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, True) 'Показывать вертикальную полосу прокрутки 'Включаем все параметры листа rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToScroll, True) 'Разрешить прокрутку таблицы колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToZoom, True) 'Разрешить пользователю масштабировать таблицу колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ShortcutKeyToZoom, True) 'Разрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus) 'rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_DragToMoveColumnHeader, True) 'Разрешить пользователю перемещать весь столбец перетаскиванием мышью (Зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ScrollToFocusCell, True) 'Всегда разрешать автоматическую прокрутку листа для показа выбранных ячеек (имеющих фокус) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, True) 'Разрешить пользователю вставлять, удалять или регулировать разделители страниц листа 'Правка rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_Readonly, True) 'Элемент управления будет работать в режиме "Только для чтения". Внесение каких-либо изменений запрещено rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoFormatCell, True) 'Разрешить форматировать данные после правки текста пользователем rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_FriendlyPercentInput, True) 'Разрешить отображение сомвола "процент" при вводе пользоателем значения ячейки с "процентным" форматом данных rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoAdjustRowHeight, True) 'Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustRowHeight, True) 'Разрешить пользователю настраивать высоту строк с помощью мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, True) 'Разрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, True) 'Разрешить пользователю регулировать ширину столбца перетаскиванием мышью rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_DragSelectionToMoveCells, True) 'Разрешить перемещать или копировать выделенный диапазон перетаскиванием мышью 'Отображение, внешний вид rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, True) 'Показывать заголовки столбцов rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, True) 'Показывать заголовки строк rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHorizontalRuler, True) 'Показывать горизонтальную линейку (зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowVerticalRuler, True) 'Показывать вертикальную линейку (зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, True) 'Показывать линии сетки rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHiddenCellLine, True) 'Разрешить отображение линии на скрытом заголовке строк rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, True) 'Разрешить показывать внешние границы строк, если они не замкнуты (outlines exiting) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, True) 'Разрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting) 'rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_MouseWheelToScroll, True) 'Разрешить прокрутку листа колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, True) 'Разрешить отображать линии разделителя страниц rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowCellTextOverflow, True) 'Сделать декст ячеек отображаемым только внутри ячейки, не перекрывая соседние ячейки 'Подсчёт формул rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, True) 'Разрешить автоматическое обновление ссылок на ячейки в формуле rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, True) 'Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.9.1 зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoRebuild, True) 'Разрешить автоматически корректировать или перестраивать формулу (0.9.1 зарезервировано)
//C# //Включаем все параметры книги rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, true); //Показывать вкладки-листы rgrid.SetSettings(WorkbookSettings.View_ShowScrolls, true); //Показывать полосы прокрутки rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, true); //Показывать горизонтальную полосу прокрутки rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, true); //Показывать вертикальную полосу прокрутки //Включаем все параметры листа rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToScroll, true); //Разрешить прокрутку таблицы колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToZoom, true); //Разрешить пользователю масштабировать таблицу колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ShortcutKeyToZoom, true); //Разрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus) //rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_DragToMoveColumnHeader, true); //Разрешить пользователю перемещать весь столбец перетаскиванием мышью (Зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ScrollToFocusCell, true); //Всегда разрешать автоматическую прокрутку листа для показа выбранных ячеек (имеющих фокус) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, true); //Разрешить пользователю вставлять, удалять или регулировать разделители страниц листа //Правка rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_Readonly, true); //Элемент управления будет работать в режиме "Только для чтения". Внесение каких-либо изменений запрещено rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoFormatCell, true); //Разрешить форматировать данные после правки текста пользователем rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_FriendlyPercentInput, true); //Разрешить отображение сомвола "процент" при вводе пользоателем значения ячейки с "процентным" форматом данных rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoAdjustRowHeight, true); //Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustRowHeight, true); //Разрешить пользователю настраивать высоту строк с помощью мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, true); //Разрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, true); //Разрешить пользователю регулировать ширину столбца перетаскиванием мышью rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_DragSelectionToMoveCells, true); //Разрешить перемещать или копировать выделенный диапазон перетаскиванием мышью //Отображение, внешний вид rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, true); //Показывать заголовки столбцов rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, true); //Показывать заголовки строк rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHorizontalRuler, true); //Показывать горизонтальную линейку (зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowVerticalRuler, true); //Показывать вертикальную линейку (зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, true); //Показывать линии сетки rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHiddenCellLine, true); //Разрешить отображение линии на скрытом заголовке строк rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, true); //Разрешить показывать внешние границы строк, если они не замкнуты (outlines exiting) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, true); //Разрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting) //rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_MouseWheelToScroll, true); //Разрешить прокрутку листа колесом мыши rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, true); //Разрешить отображать линии разделителя страниц rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowCellTextOverflow, true); //Сделать декст ячеек отображаемым только внутри ячейки, не перекрывая соседние ячейки //Подсчёт формул rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, true); //Разрешить автоматическое обновление ссылок на ячейки в формуле rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, true); //Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.9.1 зарезервировано) rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoRebuild, true); //Разрешить автоматически корректировать или перестраивать формулу (0.9.1 зарезервировано)
События листа
Событие | Когда возникает |
---|---|
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 | При возникновении ошибок в процессе операции вставки |
Локализация встроенных элементов
'VB 'Локализация unvell.ReoGrid.LanguageResource.Button_Cancel = "Отмена" unvell.ReoGrid.LanguageResource.Button_OK = "ОК" unvell.ReoGrid.LanguageResource.Filter_SelectAll = "Выбрать все" unvell.ReoGrid.LanguageResource.Filter_SortAtoZ = "Сортировка от А до Я" unvell.ReoGrid.LanguageResource.Filter_SortZtoA = "Сортировка от Я до А" unvell.ReoGrid.LanguageResource.Menu_DeleteSheet = "Удалить" unvell.ReoGrid.LanguageResource.Menu_InsertSheet = "Вставить" unvell.ReoGrid.LanguageResource.Menu_RenameSheet = "Переименовать" unvell.ReoGrid.LanguageResource.Sheet = "Лист" unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_NameLabel = "Имя" unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_Title = "Переименование" rgrid.CurrentWorksheet.Name = "Лист 1"
//C# //Локализация unvell.ReoGrid.LanguageResource.Button_Cancel = "Отмена"; unvell.ReoGrid.LanguageResource.Button_OK = "ОК"; unvell.ReoGrid.LanguageResource.Filter_SelectAll = "Выбрать все"; unvell.ReoGrid.LanguageResource.Filter_SortAtoZ = "Сортировка от А до Я"; unvell.ReoGrid.LanguageResource.Filter_SortZtoA = "Сортировка от Я до А"; unvell.ReoGrid.LanguageResource.Menu_DeleteSheet = "Удалить"; unvell.ReoGrid.LanguageResource.Menu_InsertSheet = "Вставить"; unvell.ReoGrid.LanguageResource.Menu_RenameSheet = "Переименовать"; unvell.ReoGrid.LanguageResource.Sheet = "Лист"; unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_NameLabel = "Имя"; unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_Title = "Переименование"; rgrid.CurrentWorksheet.Name = "Лист 1";
Вариант инициализации списков
Все компоненты с префиксом cbo являются раскрывающимися списками ComboBox
Заполняем списки перечнем кеглей (размеров) шрифта, гарнитур (семейств) шрифтов и количества процентов
'VB 'Кегли cboFontSize.Items.AddRange({8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 48, 60, 72, 96, 100}) 'Гарнитуры cboFontName.DataSource = FontFamily.Families cboFontName.ValueMember = "Name" cboFontName.Text = "Выберите гарнитуру" 'Масштабирование cboZoom.Items.AddRange({"25%", "50%", "75%", "100%", "125%", "150%", "200%", "300%", "400%"})
//C# //Кегли cboFontSize.Items.AddRange(new string[] {"8", "9","10", "11", "12", "14", "16", "18", "20", "22", "24", "28", "32", "36", "48", "60", "72", "96", "100"}); //Гарнитуры cboFontName.DataSource = FontFamily.Families; cboFontName.ValueMember = "Name"; cboFontName.Text = "Выберите гарнитуру"; //Масштабирование cboZoom.Items.AddRange(new string[] {"25%", "50%", "75%", "100%", "125%", "150%", "200%", "300%", "400%"});
Cовместимость с форматом Excel
Reogrid имеет повышенную совместимость с форматом Excel 2007/2010 (xlsx): возможно как считывание данных, так и их запись. При этом поддерживаются основные стили оформления ячеек, встроенные плавающие изображения и некоторые типы диаграмм. Также ожидается поддержка совместимости с LibreOffice Calc для этого же формата.
Reogrid представляет собой книгу (Workbook), которая может содержать вложенные листы-таблицы (WorkSheets). Для переключения между листами служит встроенный отключаемый вкладочный элемент (TabControl). Активный лист имеет псевдоним CurrentWorkSheet.
В примерах будут встречаться примеры загрузки и сохранения данных, используя формат Microsoft Excel. Наличие установленной копии офисного пакета от Майкрософт не требуется.
Поддерживаемые встроенные функции, многие из которых совместимы с 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 | Логическое ИЛИ |
Функции для строки формул (заполняем ComboBox с именем cboFunctions)
'VB cboFunctions.Items.Add("AVERAGE(,)") cboFunctions.Items.Add("AVERAGEIF()") cboFunctions.Items.Add("COUNT()") cboFunctions.Items.Add("COUNTIF(,)") cboFunctions.Items.Add("SUM()") cboFunctions.Items.Add("SUMIF(,)") cboFunctions.Items.Add("AND") cboFunctions.Items.Add("IF") cboFunctions.Items.Add("NOT") cboFunctions.Items.Add("OR") cboFunctions.Items.Add("ADDRESS(,)") cboFunctions.Items.Add("COLUMNS()") cboFunctions.Items.Add("INDEX(,)") cboFunctions.Items.Add("INDIRECT()") cboFunctions.Items.Add("ROWS()") cboFunctions.Items.Add("ABS()") cboFunctions.Items.Add("ACOS()") cboFunctions.Items.Add("ASIN()") cboFunctions.Items.Add("ATAN()") cboFunctions.Items.Add("ATAN2()") cboFunctions.Items.Add("CEILING(,)") cboFunctions.Items.Add("COS()") cboFunctions.Items.Add("EXP()") cboFunctions.Items.Add("FLOOR()") cboFunctions.Items.Add("MAX()") cboFunctions.Items.Add("MIN()") cboFunctions.Items.Add("ROUND(,)") cboFunctions.Items.Add("SIN()") cboFunctions.Items.Add("TAN()") cboFunctions.Items.Add("DAY()") cboFunctions.Items.Add("DAYS()") cboFunctions.Items.Add("HOUR()") cboFunctions.Items.Add("MILLISECOND()") cboFunctions.Items.Add("MINUTE()") cboFunctions.Items.Add("MONTH()") cboFunctions.Items.Add("NOW()") cboFunctions.Items.Add("SECOND()") cboFunctions.Items.Add("TIME()") cboFunctions.Items.Add("TODAY()") cboFunctions.Items.Add("YEAR()") cboFunctions.Items.Add("FIND()") cboFunctions.Items.Add("LEFT()") cboFunctions.Items.Add("LEN()") cboFunctions.Items.Add("LENB()") cboFunctions.Items.Add("LOOKUP") cboFunctions.Items.Add("LOWER()") cboFunctions.Items.Add("MID()") cboFunctions.Items.Add("RIGHT()") cboFunctions.Items.Add("TRIM()") cboFunctions.Items.Add("UPPER()")
//C# cboFunctions.Items.Add("AVERAGE(,)"); cboFunctions.Items.Add("AVERAGEIF()"); cboFunctions.Items.Add("COUNT()"); cboFunctions.Items.Add("COUNTIF(,)"); cboFunctions.Items.Add("SUM()"); cboFunctions.Items.Add("SUMIF(,)"); cboFunctions.Items.Add("AND"); cboFunctions.Items.Add("IF"); cboFunctions.Items.Add("NOT"); cboFunctions.Items.Add("OR"); cboFunctions.Items.Add("ADDRESS(,)"); cboFunctions.Items.Add("COLUMNS()"); cboFunctions.Items.Add("INDEX(,)"); cboFunctions.Items.Add("INDIRECT()"); cboFunctions.Items.Add("ROWS()"); cboFunctions.Items.Add("ABS()"); cboFunctions.Items.Add("ACOS()"); cboFunctions.Items.Add("ASIN()"); cboFunctions.Items.Add("ATAN()"); cboFunctions.Items.Add("ATAN2()"); cboFunctions.Items.Add("CEILING(,)"); cboFunctions.Items.Add("COS()"); cboFunctions.Items.Add("EXP()"); cboFunctions.Items.Add("FLOOR()"); cboFunctions.Items.Add("MAX()"); cboFunctions.Items.Add("MIN()"); cboFunctions.Items.Add("ROUND(,)"); cboFunctions.Items.Add("SIN()"); cboFunctions.Items.Add("TAN()"); cboFunctions.Items.Add("DAY()"); cboFunctions.Items.Add("DAYS()"); cboFunctions.Items.Add("HOUR()"); cboFunctions.Items.Add("MILLISECOND()"); cboFunctions.Items.Add("MINUTE()"); cboFunctions.Items.Add("MONTH()"); cboFunctions.Items.Add("NOW()"); cboFunctions.Items.Add("SECOND()"); cboFunctions.Items.Add("TIME()"); cboFunctions.Items.Add("TODAY()"); cboFunctions.Items.Add("YEAR()"); cboFunctions.Items.Add("FIND()"); cboFunctions.Items.Add("LEFT()"); cboFunctions.Items.Add("LEN()"); cboFunctions.Items.Add("LENB()"); cboFunctions.Items.Add("LOOKUP"); cboFunctions.Items.Add("LOWER()"); cboFunctions.Items.Add("MID()"); cboFunctions.Items.Add("RIGHT()"); cboFunctions.Items.Add("TRIM()"); cboFunctions.Items.Add("UPPER()");
Формула (Formula)
Что следует учитывать при работе с формулами
- Данные в ячейке, начинающиеся с символа “=”, автоматически обрабатываются как формула.
- Значения ячеек с формулами автоматически обновляются при изменении значений в связанных с ними ячейках.
- Данные в ячейке, начинающиеся с символа (‘) не будут восприниматься как формула.
- Язык формул ReoGrid чувствителен к регистру, все функции, совместимыe с Microsoft Excel, должны указываться в ВЕРХНЕМ регистре, например SUM и AVERAGE, вызов функции и использованием имён вида “sum” приведёт к возникновению исключения ‘function not found’ (функция не найдена).
Ссылки на ячейки (References of Cell)
Как и Microsoft Excel, ReoGrid поддерживает ссылки на ячейку и диапазон.
'VB 'Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3) rgrid.CurrentWorksheet("H8") = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)" 'Получение списка ссылок из ячейки Dim rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8")
//C# //Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3) rgrid.CurrentWorksheet["H8"] = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)"; //Получение списка ссылок из ячейки var 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") 'Следующий код позволит постоянно отображать трассирующие стрелки 'Добавляем обработчик события '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.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"); //Следующий код позволит постоянно отображать трассирующие стрелки //rgrid.CellDataChanged += (s, e) => e.Cell.TraceFormulaPrecedents = true;
Трассировка зависимостей (Trace Dependents)
Определение именованного диапазона, установка значений именованного диапазона и применение формулы суммирования к именованному диапазону
'VB Dim namedRange As NamedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2") namedRange.Data = New Object() {1, 3, 5, 7} rgrid.CurrentWorksheet("F2") = "=SUM(items)"
//C# NamedRange namedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2"); namedRange.Data = new object[] {1,3,5,7}; rgrid.CurrentWorksheet["F2"] = "=SUM(items)";
1. Переносим выбранную функцию из списка в текстовое поле формулы. Для этого используем обработчик события SelectedIndexChanged для раскрывающегося списка cboFunctions
'VB txtFormula.Text &= cboFunctions.Text
//C# txtFormula.Text += cboFunctions.Text;
Переносим формулу в выбранную ячейку. Используется обработчик события KeyDown для текстового поля форулы txtFormula
Изменение формулы по в текстовом поле (обработка события txtFormula_KeyDown)
'VB If e.KeyCode = Keys.Enter Then rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text End If
//C# if (e.KeyCode == Keys.Enter) { rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].Formula = txtFormula.Text; }
Получение информации из выбранной пользователем ячейки. Для этого используется обработчик события FocusPosChanged компонента Reogrid.
'VB 'Получаем значение поля Formula Dim strFormula As String = rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula 'Если поле не пустое - заносим его значение в строку формул, в поле списка функций заносим основные данные из ячейки If Len(strFormula) >= 0 Then txtFormula.Text = strFormula cboFunctions.Text = rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).DisplayText End If
//C# //Получаем значение поля Formula { string strFormula = rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].Formula; //Если поле не пустое - заносим его значение в строку формул, в поле списка функций заносим основные данные из ячейки if (strFormula.Length >= 0) { txtFormula.Text = strFormula; cboFunctions.Text = rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].DisplayText; } }
Раздел “Файл” – функции, обычно доступные в меню “Файл”
Новый документ. Очистка листа или книги.
Если применить метод Reset к книге, то из неё удаляются все листы, после чего создаётся один пустой. Если же применить метод к листу – лист просто очистится от данных.
'VB rgrid.Reset() rgrid.CurrentWorksheet.Reset()
//C# rgrid.Reset(); rgrid.CurrentWorksheet.Reset();
Загрузка данных
Загрузка данных выполняется при помощи перегруженной функции Load (для всей книги) или по одному листу с использованием функций LoadCSV, LoadRGF, которые вполне могут исчезнуть в следующих версиях.
Первым её параметром может быть имя файла или файловый поток ввода-вывода
Второй параметр – формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto – автовыбор, _Custom – ещё не реализован)
Третий и необязательный параметр – кодировка символов. Его использование требует импортировать пространство имён System.Text
'VB 'Загрузка данных из файла формата ReoGridFormat с использованием файлового потока Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Read) rgrid.Load(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8) End Using 'Загрузка данных из файлов поддерживаемых форматов 'Вариант с функцией Load (книга целиком) rgrid.Load(Application.StartupPath & "\test.csv", IO.FileFormat.CSV, Encoding.UTF8) 'CSV rgrid.Load(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) 'ReoGridFormat rgrid.Load(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) 'Excel 2007/2010 'Вариант с функцией LoadCSV (только один лист) rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath & "\test.csv", Encoding.UTF8)
//C# //Загрузка данных из файла формата ReoGridFormat с использованием файлового потока using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Read)) { rgrid.Load(ss, unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8); } //Загрузка данных из файлов поддерживаемых форматов //Вариант с функцией Load (книга целиком) rgrid.Load(Application.StartupPath + "\\test.csv", unvell.ReoGrid.IO.FileFormat.CSV, Encoding.UTF8);//CSV rgrid.Load(Application.StartupPath + "\\test.rgf", unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8);//ReoGridFormat rgrid.Load(Application.StartupPath + "\\test.xlsx", unvell.ReoGrid.IO.FileFormat.Excel2007, Encoding.UTF8);//Excel 2007/2010 //Вариант с функцией LoadCSV (только один лист) rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath + "\\test.csv", Encoding.UTF8);
Сохранение данных
Сохранение данных выполняется при помощи перегруженной функции Save. Её параметры аналогичны функции Load
Первым её параметром может быть имя файла или файловый поток ввода-вывода
Второй параметр – формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto – автовыбор, _Custom – ещё не реализован)
Третий и необязательный параметр – кодировка символов. Его использование требует импортировать пространство имён System.Text
Экспорт в формат HTML выполняется только через файловый поток и только для одного листа. Возможны два варианта: с заголовком (title) по умолчанию или же с произвольным заголовком
'VB 'Сохранение данных в файл формата ReoGridFormat с использованием файлового потока Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Write) rgrid.Save(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8) End Using 'Сохранение с использованием методов rgrid.CurrentWorksheet.ExportAsCSV(Application.StartupPath & "\test.csv", , Encoding.UTF8) 'CSV rgrid.Save(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) 'ReoGridFormat rgrid.Save(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) 'Excel 2007/2010 'HTML Using ss As FileStream = New FileStream(Application.StartupPath & "\test.html", FileMode.Create, FileAccess.Write) rgrid.CurrentWorksheet.ExportAsHTML(ss) 'Заголовок по умолчанию rgrid.CurrentWorksheet.ExportAsHTML(ss, "Произвольный заголовок") 'Произвольный заголовок End Using
//C# //Сохранение данных в файл формата ReoGridFormat с использованием файлового потока using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Write)) { rgrid.Save(ss, unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8); } //Сохранение с использованием методов rgrid.CurrentWorksheet.ExportAsCSV(Application.StartupPath + "\\test.csv", string.Empty, Encoding.UTF8); //CSV rgrid.Save(Application.StartupPath + "\\test.rgf", unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8); //ReoGridFormat rgrid.Save(Application.StartupPath + "\\test.xlsx", unvell.ReoGrid.IO.FileFormat.Excel2007, Encoding.UTF8); //Excel 2007/2010 //HTML using (FileStream ss = new FileStream(Application.StartupPath + "\\test.html", FileMode.Create, FileAccess.Write)) { rgrid.CurrentWorksheet.ExportAsHTML(ss); //Заголовок по умолчанию rgrid.CurrentWorksheet.ExportAsHTML(ss, "Произвольный заголовок"); //Произвольный заголовок }
Разбивка на страницы и печать (Paging and Printing)
Авторазбивка на страницы (Auto Paging)
При выводе таблицы на печать, её содержимое автоматически разделяется между страницами.
Как и в Excel, Reogrid определяет, сколько ячеек можно разместить на каждой странице. Если все ячейки не помещаются на данной странице, то остаток переносится на следующую страницу.
Отображение линий разрывов страниц на экране
Автопрверка диапазона печати
Если диапазон печати неопределён, то ReoGrid попытается найти максимум ячеек, заполненных данными и установит диапазон печати автоматически.
Изменение диапазона печати
Для изменения диапазона печати листа используется свойство PrintableRange
Если размер диапазона печати превышает размер страницы, то он будет разбит автоматически. Ячейки за пределами диапазона печати не будут распечатаны.
Изменение порядка следования страниц
Изменение параметров страницы
Для этого используется свойство PageSettings
Теперь максимум данных из ячейки ‘A’ могут быть распечатаны в альбомной ориентации бумаги
Вставка разрывов страниц
Для их вставки предназначены свойства RowPageBreaks и ColumnPageBreaks.
Обновление разбивки страницы выполняется уже знакомым методом AutoSplitPage.
Пример того, как таблица разбивается на две страницы:
Системные и пользовательские разрывы страниц
Существует два вида разрывов страниц: обозначаемые пунктирной линией системные, получаемые при помощи метода AutoSplitPage, а также обозначаемые сплошной линиейпользовательские, вставляемые или перетаскиваемые мышью пользователем вручную.
Изменение разрывов страниц
Для изменения/перемещения индексов системных разрывов страниц используются следующие методы ChangeColumnPageBreak и ChangeRowPageBreak
После изменения системных индексов на пользовательские, пунктирная линия сменится сплошной.
Повторения страниц (Iterate pages)
Для повторения всех печатаемых страниц используется метод IteratePrintPage, возвращающий диапазон печати для каждой страницы.
Пример результата вывода на принтер (см. пример ниже):
Диапазон печати: A1:E11 Диапазон печати: F1:K11
По-возможности, повторение страниц (iterate pages) определяется порядком (C#):
rgrid.CurrentWorksheet.IteratePrintPages(PrintPageOrder.OverThenDown, range => { ... }); Если порядок следования страниц не будет указан, то будет использоваться порядок печати.
Отключение возможности изменения/подстройки разрывов страниц пользователем
Для этого используется параметр настройки WorksheetSettings.Behavior_AllowUserChangingPageBreaks
Основные действия показаны в следующих блоках кода:
'VB 'Авторазбивка на страницы rgrid.CurrentWorksheet.AutoSplitPage() 'Отображение линий разрывов страниц на экране rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks) 'Изменение диапазона печати rgrid.CurrentWorksheet.PrintableRange = New ReoGridRange(1, 1, 9, 9) 'Изменение порядка следования страниц rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver 'Изменение параметров страницы 'Для этого используется свойство PageSettings 'rgrid.CurrentWorksheet.PageSettings.Landscape = True 'rgrid.CurrentWorksheet.PrintSettings.Landscape = True 'Вставка разрывов страниц 'rgrid.CurrentWorksheet.RowPageBreaks.Add(5) 'rgrid.CurrentWorksheet.ColumnPageBreaks.Add(5) 'Обновление разбивки страницы rgrid.CurrentWorksheet.AutoSplitPage() 'Изменение разрывов страниц rgrid.CurrentWorksheet.ChangeColumnPageBreak(0, 1) 'Старый индекс, Новый индекс rgrid.CurrentWorksheet.ChangeRowPageBreak(0, 1) ' Старый индекс, Новый индекс 'Повторения страниц (Iterate pages) rgrid.CurrentWorksheet.IteratePrintPages(Function(range) Console.WriteLine("Диапазон печати: " + range.ToAddress()) Return True End Function) 'Отключение возможности изменения/подстройки разрывов страниц пользователем rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks)
//C# //Авторазбивка на страницы rgrid.CurrentWorksheet.AutoSplitPage(); //Отображение линий разрывов страниц на экране rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks); //Изменение диапазона печати rgrid.CurrentWorksheet.PrintableRange = new ReoGridRange(1, 1, 9, 9); //Изменение порядка следования страниц rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver; //Изменение параметров страницы //Для этого используется свойство PageSettings //rgrid.CurrentWorksheet.PageSettings.Landscape = true; //rgrid.CurrentWorksheet.PrintSettings.Landscape = true; //Вставка разрывов страниц //rgrid.CurrentWorksheet.RowPageBreaks.Add(5); //rgrid.CurrentWorksheet.ColumnPageBreaks.Add(5); //Обновление разбивки страницы rgrid.CurrentWorksheet.AutoSplitPage(); //Изменение разрывов страниц rgrid.CurrentWorksheet.ChangeColumnPageBreak(0, 1);//Старый индекс, Новый индекс rgrid.CurrentWorksheet.ChangeRowPageBreak(0, 1);//Старый индекс, Новый индекс //Повторения страниц (Iterate pages) rgrid.CurrentWorksheet.IteratePrintPages(range => { Console.WriteLine("Диапазон печати: " + range.ToAddress()); return true; }); //Отключение возможности изменения/подстройки разрывов страниц пользователем rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks);
Сессии печати (Print Session) и предварительный просмотр
Представляют собой сессии для вывода на печать определённых листов или целой книги.
'VB 'Вывод на печать содержимого одного листа с настройками по умолчанию Dim session = rgrid.CurrentWorksheet.CreatePrintSession() session.Print() 'Вывод на печать содержимого книги (всех листов). Доступно только в Pro-издании Dim session1 = rgrid.CreatePrintSession() session1.Print() 'Вывод на печать определённых листов. Доступно только в Pro-издании Dim session2 = rgrid.CreatePrintSession() session2.Worksheets.Clear() session2.Worksheets.Add(rgrid.Worksheets("Sheet1")) session2.Worksheets.Add(rgrid.Worksheets("Sheet3")) session2.Print() 'Предварительный просмотр (Print Preview). Отображение диалогового окна Dim sheet = rgrid.CurrentWorksheet Using session3 = sheet.CreatePrintSession() Using ppd As New PrintPreviewDialog() ppd.Document = session3.PrintDocument ppd.SetBounds(200, 200, 1024, 768) ppd.PrintPreviewControl.Zoom = 1.0 ppd.ShowDialog(Me) End Using End Using
//C# //Вывод на печать содержимого одного листа с настройками по умолчанию var session = rgrid.CurrentWorksheet.CreatePrintSession(); session.Print(); //Вывод на печать содержимого книги (всех листов). Доступно только в Pro-издании var session1 = rgrid.CreatePrintSession(); session1.Print(); //Вывод на печать определённых листов. Доступно только в Pro-издании var session2 = rgrid.CreatePrintSession(); session2.Worksheets.Clear(); session2.Worksheets.Add(rgrid.Worksheets["Sheet1"]); session2.Worksheets.Add(rgrid.Worksheets["Sheet3"]); session2.Print(); //Предварительный просмотр (Print Preview). Отображение диалогового окна var sheet = rgrid.CurrentWorksheet; using (var session3 = sheet.CreatePrintSession()) { using (PrintPreviewDialog ppd = new PrintPreviewDialog()) { ppd.Document = session3.PrintDocument; ppd.SetBounds(200, 200, 1024, 768); ppd.PrintPreviewControl.Zoom = 1d; ppd.ShowDialog(this); } }
Отображение системного диалогового окна настройки параметров страницы
- Создаём экземпляр диалогового окна
- Импортируем настройки из параметров листа
- Настраиваем параметры
- Как только пользователь выбрал нужные настройки и нажал экранную кнопку “ОК”, импортируем настройки обратно в параметры листа Reogrid
'VB Using psd As PageSetupDialog = New PageSetupDialog() psd.PageSettings = rgrid.CurrentWorksheet.PrintSettings.CreateSystemPageSettings() psd.AllowMargins = True psd.AllowPrinter = True psd.AllowPaper = True psd.EnableMetric = True If psd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then rgrid.CurrentWorksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings) End If End Using
//C# using (PageSetupDialog psd = new PageSetupDialog()) { // transform ReoGrid page settings to System page settings psd.PageSettings = rgrid.CurrentWorksheet.PrintSettings.CreateSystemPageSettings(); psd.AllowMargins = true; psd.AllowPrinter = true; psd.AllowPaper = true; psd.EnableMetric = true; if (psd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // transform System page settings to ReoGrid page settings rgrid.CurrentWorksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings); } }
Вариант вызова диалога предварительного просмотра
'VB 'Создаём документ для печати Dim docp As System.Drawing.Printing.PrintDocument = Nothing 'Показываем диалоговое окно предварительного просмотра Using ppd As PrintPreviewDialog = New PrintPreviewDialog() ppd.Document = docp ppd.SetBounds(200, 200, 1024, 768) ppd.PrintPreviewControl.Zoom = 0.5D '1D ppd.PrintPreviewControl.Columns = 2 ppd.PrintPreviewControl.Rows = 2 ppd.ShowDialog(Me) End Using
//C# //Создаём документ для печати System.Drawing.Printing.PrintDocument docp = null;//rgrid.CurrentWorksheet.CreatePrintSession(); //Показываем диалоговое окно предварительного просмотра using (PrintPreviewDialog ppd = new PrintPreviewDialog()) { ppd.Document = docp; ppd.SetBounds(200, 200, 1024, 768); ppd.PrintPreviewControl.Zoom = 0.5D;//1D ppd.PrintPreviewControl.Columns = 2; ppd.PrintPreviewControl.Rows = 2; ppd.ShowDialog(this); }
Вывод содержимого листа на печать с использованием стандартного диалогового окна печати
'VB Dim doc As System.Drawing.Printing.PrintDocument = Nothing Try doc = rgrid.CurrentWorksheet.CreatePrintSession().PrintDocument Catch ex As Exception MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information) Return End Try Using pd = New System.Windows.Forms.PrintDialog() pd.Document = doc pd.UseEXDialog = True 'в 64-битной Windows If pd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then doc.PrinterSettings = pd.PrinterSettings doc.Print() End If End Using If doc <> Nothing Then doc.Dispose()
//C# System.Drawing.Printing.PrintDocument doc = null; try { doc = rgrid.CurrentWorksheet.CreatePrintSession().PrintDocument; } catch (Exception ex) { MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } using (var pd = new System.Windows.Forms.PrintDialog()) { pd.Document = doc; pd.UseEXDialog = true; // в 64-битной Windows if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { doc.PrinterSettings = pd.PrinterSettings; doc.Print(); } } if (doc != null) doc.Dispose();
Раздел “Правка” – функции, обычно доступные в меню “Правка”
Отмена последнего действия, возврат отменённого действия и повтор последнего. Выполняются только если это возможно
'VB If rgrid.CanUndo = True Then rgrid.Undo() If rgrid.CanRedo = True Then rgrid.Redo() rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange)
//C# if (rgrid.CanUndo() == true) rgrid.Undo(); if (rgrid.CanRedo() == true) rgrid.Redo(); rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange);
Буфер обмена (Clipboard)
Небольшое отступление. О реализации работы с буфером обмена.
При копировании содержимого нескольких ячеек, например, девяти, в буфер обмена заносится текст в следующем формате: ячейки одной строки разделяются символом табуляции, строки разделяются символом перевода строки:
A1 \t B1 \t C1 \n A2 \t B2 \t C2 \n A3 \t B3 \t C3 \n
Примечание. Для перехвата системных горячих клавиш введены события с префиксом Before: BeforeCut, BeforeCopy, BeforePaste. Также могут понадобиться события с префиксом After: AfterCut, AfterCopy, AfterPaste
Для выделения всех ячеек используется метод SelectAll
'VB 'Вырезать (Cut), Копировать (Copy). Проверяем возможность и выполняем процедуру If rgrid.CurrentWorksheet.CanCut = True Then rgrid.CurrentWorksheet.Cut() If rgrid.CurrentWorksheet.CanCopy = True Then rgrid.CurrentWorksheet.Copy() If rgrid.CurrentWorksheet.CanPaste = True Then rgrid.CurrentWorksheet.Paste() 'Если нужно контролировать процесс получения данных из буфера обмена 'Создание переменной и получение данных 'Преобразование в массив типа Объект 'Перенос данных в таблицу Dim text As String = Clipboard.GetText() Dim data(,) As Object = RGUtility.ParseTabbedString(text) rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, data) 'Выделить все rgrid.CurrentWorksheet.SelectAll()
//C# //Вырезать (Cut), Копировать (Copy). Проверяем возможность и выполняем процедуру if (rgrid.CurrentWorksheet.CanCut() == true) rgrid.CurrentWorksheet.Cut(); if (rgrid.CurrentWorksheet.CanCopy() == true) rgrid.CurrentWorksheet.Copy(); if (rgrid.CurrentWorksheet.CanPaste() == true) rgrid.CurrentWorksheet.Paste(); //Если нужно контролировать процесс получения данных из буфера обмена //Создание переменной и получение данных //Преобразование в массив типа Объект //Перенос данных в таблицу string text = Clipboard.GetText(); object[,] data = RGUtility.ParseTabbedString(text); rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, data); //Выделить все rgrid.CurrentWorksheet.SelectAll();
Для событий BeforeCut, BeforeCopy, BeforePaste можно выполнить перехват горячих клавиш и не допустить выполнение функции. Для этого в обработчик события достаточно добавить строку e.IsCancelled = True (VB), e.IsCancelled == true (C#).
Раздел “Вид” – функции, обычно доступные в меню “Вид” (View)
- Стиль выделения (Selection Style). Определяет внешний вид активной ячейки.
- Режим выделения (Selection Mode). Определяет активный элемент (по умолчанию – диапазон).
- Направление перехода (Direction). Определяет направление перехода фокуса после окончания правки ячейки.
Изменение размеров таблицы (Resize)
На данный момент лист Reogrid максимально может содержать 1048576 строк и 32768 столбцов
'VB 'Стиль выделения rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.None 'Отсутствует rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.Default 'По умолчанию rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.FocusRect 'Фокус Windows 'Режим выделения rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.None 'Отсутствует rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell 'Одна ячейка rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Range 'Диапазон ячеек rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Row 'Строка rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Column 'Столбец 'Направление перехода rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Right 'Вправо rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Down 'Вниз
//C# //Стиль выделения rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.None; rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.Default; rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.FocusRect; //Режим выделения rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.None; rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell; rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Range; rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Row; rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Column; //Направление перехода rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Right; rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Down;
Фиксация ячеек (Freezing)
Если позиция имеет значения 0,0, то на данный момент зафиксированные строки или столбцы отсутствуют
Если зафиксированная область больше максимальной области отображения элемента управления, то активная область станет невидимой
'VB 'Получаем позицию заморозки/закрепления Dim pos As ReoGridPos = rgrid.CurrentWorksheet.GetFreezePos() 'Проверяем - зафиксирован ли данный лист: Dim isFrozen As Boolean = rgrid.CurrentWorksheet.IsFrozen() 'Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации) rgrid.CurrentWorksheet.FreezeToCell(5, 0) 'Обычная фиксация (указана только позиция) rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left) 'С привязкой по левому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right) 'С привязкой по правому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top) 'С привязкой по верхнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom) 'С привязкой по нижнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop) 'С привязкой по левому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom) 'С привязкой по левому и нижнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop) 'С привязкой по правому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom) 'С привязкой по правому и нижнему краям 'Отмена фиксации rgrid.CurrentWorksheet.Unfreeze()
//C# //Получаем позицию заморозки/закрепления ReoGridPos pos = rgrid.CurrentWorksheet.GetFreezePos(); //Проверяем - зафиксирован ли данный лист: bool isFrozen = rgrid.CurrentWorksheet.IsFrozen(); //Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации) rgrid.CurrentWorksheet.FreezeToCell(5, 0);//Обычная фиксация (указана только позиция) rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left);//С привязкой по левому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right);//С привязкой по правому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top);//С привязкой по верхнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom);//С привязкой по нижнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop);//С привязкой по левому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom);//С привязкой по левому и нижнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop);//С привязкой по правому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom);//С привязкой по правому и нижнему краям //Отмена фиксации rgrid.CurrentWorksheet.Unfreeze();
Изменение размера
'VB 'Получаем количество строк и столбцов Dim intRows As Integer = rgrid.CurrentWorksheet.RowCount 'Количество строк Dim intCols As Integer = rgrid.CurrentWorksheet.ColumnCount 'Количество столбцов 'Задаём размер таблицы используя указанные выше переменные rgrid.CurrentWorksheet.Resize(intRows, intCols) 'Или максимальное количество ячеек rgrid.CurrentWorksheet.Resize(1048576, 32768)
//C# //Получаем количество строк и столбцов int intRows = rgrid.CurrentWorksheet.RowCount; int intCols = rgrid.CurrentWorksheet.ColumnCount; //Задаём размер таблицы используя указанные выше переменные rgrid.CurrentWorksheet.Resize(intRows, intCols); //Или максимальное количество ячеек rgrid.CurrentWorksheet.Resize(1048576, 32768);
Стили
Для определения факта изменения стиля отображения ReoGrid использует перечисление PlainStyleFlag
Сначала необходимо указать флаги изменяемых параметров, а затем уже и присвоить значения
Установка стиля
Метод
Всегда применяем стиль к диапазону, а не к отдельной ячейке.
rgrid.CurrentWorksheet.SetRangeStyles(Диапазон типа ReoGridRange, Стиль типа ReoGridRangeStyle)
Действие
rgrid.CurrentWorksheet.DoAction(new RGSetRangeStyleAction(Диапазон типа ReoGridRange, Стиль типа WorksheetRangeStyle))
В сценарии (Script)
rgrid.CurrentWorksheet.getCell(0, 0).style.backgroundColor = 'red'
Получение значений стилей
Получаем стили диапазона или ячейки:
rgrid.CurrentWorksheet.GetRangeStyle(Диапазон типа ReoGridRange) rgrid.CurrentWorksheet.GetCellStyle(Позиция_ячейки типа ReoGridPos)
Флаг PlainStyleFlag позволяет указать, какие стили должны быть удалены. В примере показано удаление стиля фона для выбранного диапазона ячеек с помощью метода и действия.
Работа со шрифтом и содержимым ячеек
Шрифт (Font). Гарнитура, кегль, цвет.
Пригодится для события TextChanged списка (ComboBox) cboFontName
'VB Dim MyStyleFont1 As New WorksheetRangeStyle MyStyleFont1.Flag = PlainStyleFlag.FontName 'Меняем гарнитуру (семейство, имя) MyStyleFont1.FontName = cboFontName.Text MyStyleFont1.Flag = PlainStyleFlag.FontSize 'Меняем кегль (размер). Пригодится для события TextChanged списка cboFontSize MyStyleFont1.FontSize = Convert.ToInt16(Val(cboFontSize.Text)) rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont1)
//C# WorksheetRangeStyle MyStyleFont1 = new WorksheetRangeStyle(); MyStyleFont1.Flag = PlainStyleFlag.FontName; MyStyleFont1.FontName = cboFontName.Text; MyStyleFont1.Flag = PlainStyleFlag.FontSize; MyStyleFont1.FontSize = int.Parse(cboFontSize.Text); rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont1);
Увеличиваем/уменьшаем кегль (размер) шрифта на 1 пт
'VB Dim MyStyle As New WorksheetRangeStyle MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange) 'Изменяем размер (кегль) шрифта Dim MyStyleFont2 As New WorksheetRangeStyle MyStyleFont2.Flag = PlainStyleFlag.FontSize MyStyleFont2.FontSize = MyStyle.FontSize + 1 '+ 1 пт MyStyleFont2.FontSize = MyStyle.FontSize - 1 '- 1 пт cboFontSize.Text = Convert.ToString(MyStyleFont2.FontSize) rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont2)
//C# WorksheetRangeStyle MyStyle = new WorksheetRangeStyle(); MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange); //Изменяем размер (кегль) шрифта WorksheetRangeStyle MyStyleFont2 = new WorksheetRangeStyle(); MyStyleFont2.Flag = PlainStyleFlag.FontSize; MyStyleFont2.FontSize = MyStyle.FontSize + 1;//+ 1 пт MyStyleFont2.FontSize = MyStyle.FontSize - 1;//- 1 пт cboFontSize.Text = Convert.ToString(MyStyleFont2.FontSize); rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont2);
Цвет текста (показано три варианта: для красного, синего и чёрного цветов)
'VB 'Изменяем цвет шрифта Dim MyStyleFont3 As New WorksheetRangeStyle MyStyleFont3.Flag = PlainStyleFlag.TextColor MyStyleFont3.TextColor = Color.Red 'Красный 'MyStyleFont3.TextColor = Color.Blue 'Синий 'MyStyleFont3.TextColor = Color.Black 'Чёрный rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont3)
//C# //Изменяем цвет шрифта на красный WorksheetRangeStyle MyStyleFont3 = new WorksheetRangeStyle(); MyStyleFont3.Flag = PlainStyleFlag.TextColor; MyStyleFont3.TextColor = Color.Red; //Красный //MyStyleFont3.TextColor = Color.Blue; //Синий //MyStyleFont3.TextColor = Color.Black; //Чёрный rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont3);
Управление начертанием и переносом слов (подразумевается использование кнопки-флажка с двумя положениями)
'VB Dim MyStyleFont4 As New WorksheetRangeStyle MyStyleFont4.Flag = PlainStyleFlag.FontStyleBold 'Полужирный MyStyleFont4.Bold = chkFontBold.Checked MyStyleFont4.Flag = PlainStyleFlag.FontStyleItalic 'Курсив (наклонный) MyStyleFont4.Italic = chkFontItalic.Checked MyStyleFont4.Flag = PlainStyleFlag.FontStyleUnderline 'Подчёркнутый MyStyleFont4.Underline = chkFontUnderline.Checked MyStyleFont4.Flag = PlainStyleFlag.FontStyleStrikethrough 'Зачёркнутый MyStyleFont4.Strikethrough = chkFontStrike.Checked MyStyleFont4.Flag = PlainStyleFlag.TextWrap 'Перенос текста (по умолчанию - без переноса, - no-wrap) If chkTextWrap.Checked = True Then MyStyleFont4.TextWrapMode = TextWrapMode.WordBreak Else MyStyleFont4.TextWrapMode = TextWrapMode.NoWrap rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont4)
//C# WorksheetRangeStyle MyStyleFont4 = new WorksheetRangeStyle(); MyStyleFont4.Flag = PlainStyleFlag.FontStyleBold; //Полужирный MyStyleFont4.Bold = chkFontBold.Checked; MyStyleFont4.Flag = PlainStyleFlag.FontStyleItalic; //Курсив (наклонный) MyStyleFont4.Italic = chkFontItalic.Checked; MyStyleFont4.Flag = PlainStyleFlag.FontStyleUnderline; //Подчёркнутый MyStyleFont4.Underline = chkFontUnderline.Checked; MyStyleFont4.Flag = PlainStyleFlag.FontStyleStrikethrough; //Зачёркнутый MyStyleFont4.Strikethrough = chkFontStrike.Checked; MyStyleFont4.Flag = PlainStyleFlag.TextWrap; //Перенос текста (по умолчанию - без переноса, - no-wrap) if (chkTextWrap.Checked == true) { MyStyleFont4.TextWrapMode = TextWrapMode.WordBreak;} else {MyStyleFont4.TextWrapMode = TextWrapMode.NoWrap;} rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont4);
Выравнивание (Align)
Текст может выравниваться как в горизонтальном, так и в вертикальном направлениях
Горизонтальное выравнивание
Для горизонтального выравнивания результат зависит от значения свойства MyStyleFont.HAlign
ReoGridHorAlign.Left – выравнивание по левому краю
ReoGridHorAlign.Center – выравнивание по центру
ReoGridHorAlign.Right – выравнивание по правому краю
ReoGridHorAlign.DistributedIndent – распределённый отступ
'VB Dim MyStyleFont5 As New WorksheetRangeStyle MyStyleFont5.Flag = PlainStyleFlag.HorizontalAlign 'Горизонтальное выравнивание по левому краю MyStyleFont5.HAlign = ReoGridHorAlign.Left 'По левому краю MyStyleFont5.HAlign = ReoGridHorAlign.Center 'По центру MyStyleFont5.HAlign = ReoGridHorAlign.Right 'По правому краю MyStyleFont5.HAlign = ReoGridHorAlign.DistributedIndent 'С распределённым отступом rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont5)
//C# WorksheetRangeStyle MyStyleFont5 = new WorksheetRangeStyle(); MyStyleFont5.Flag = PlainStyleFlag.HorizontalAlign; MyStyleFont5.HAlign = ReoGridHorAlign.Left; //По левому краю MyStyleFont5.HAlign = ReoGridHorAlign.Center; //По центру MyStyleFont5.HAlign = ReoGridHorAlign.Right; //По правому краю MyStyleFont5.HAlign = ReoGridHorAlign.DistributedIndent; //С распределённым отступом rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont5);
Вертикальное выравнивание
Для вертикального выравнивания результат зависит от значения свойства MyStyleFont.VAlign
ReoGridVerAlign.Top – выравнивание по верхней стороне
ReoGridVerAlign.Middle – выравнивание по центру
ReoGridVerAlign.Bottom – выравнивание по нижней стороне
'VB Dim MyStyleFont6 As New WorksheetRangeStyle MyStyleFont6.Flag = PlainStyleFlag.VerticalAlign MyStyleFont6.VAlign = ReoGridVerAlign.Top 'По верхней стороне MyStyleFont6.VAlign = ReoGridVerAlign.Middle 'Посередине MyStyleFont6.VAlign = ReoGridVerAlign.Bottom 'По нижней стороне rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont6)
//C# WorksheetRangeStyle MyStyleFont6 = new WorksheetRangeStyle(); MyStyleFont6.Flag = PlainStyleFlag.VerticalAlign; MyStyleFont6.VAlign = ReoGridVerAlign.Top; //По верхней стороне //Меняется только эта строка MyStyleFont6.VAlign = ReoGridVerAlign.Middle; //Посередине MyStyleFont6.VAlign = ReoGridVerAlign.Bottom; //По нижней стороне rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont6);
Объединение и разделение ячеек
Reogrid позволяет объединять и снова разделять ячейки. При этом объединять пересекающиеся диапазоны запрещено: ячейки из одного объединения не должны принадлежать другому. Также предусмотрены возможности проверки текущего состояния произвольной ячейки.
Объединение ячеек
1. Объединяем ячейки, начиная с (2,1). Количество строк – 3, количество столбцов – 4
2. Диапазон объединения начинается в (0,0), содержит 4 строки и 6 столбцов
'VB '1 rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(2, 1, 3, 4)) '2 'rgrid.CurrentWorksheet.DoAction(New MergeRangeAction(New ReoGridRange(0, 0, 4, 6)))
//C# //1 rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(2, 1, 3, 4)); //2 //rgrid.CurrentWorksheet.DoAction(new MergeRangeAction(new ReoGridRange(0, 0, 4, 6)))
Разделение ячеек
Исключение 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); MessageBox.Show("Слияние ячеек");
Нельзя объединять ячейки из разных объединённых диапазонов – это вызовет ошибку.
'VB rgrid.CurrentWorksheet.Reset() Try 'Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(2, 2, 5, 5)) rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(3, 3, 5, 5)) Catch 'unvell.reogrid.RangeIntersectionException MessageBox.Show("Обнаружено исключение RangeIntersectionException! Невозможно изменить часть диапазона ячеек.") End Try
//C# rgrid.CurrentWorksheet.Reset(); try { //Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(2, 2, 5, 5)); rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(3, 3, 5, 5)); //unvell.reogrid.RangeIntersectionException } catch { MessageBox.Show("Обнаружено исключение RangeIntersectionException! Невозможно изменить часть диапазона ячеек."); }
Проверки и получение значений
Используются следующие методы и свойства:
- IsMergedCell – метод для проверки факта объединения ячеек;
- GetRowspan – свойство ячейки для определения количества строк в объединении (number of rowspan);
- GetColspan – свойство ячейки для определения количества столбцов в объединении (number of colspan);
- GetMergedCellOfRange – метод для поиска объединенной ячейки в определенном диапазоне.
- CheckMergedRange – метод для определения всей ячейки, если известна её часть.
- IsValidCell – метод проверки ячеек на действительность. Недействительными ячейками являются ячейки, объединённые с другими. Недействительной ячейке нельзя задать данные или стили.
Примеры использования.
Ячейка в позиции 2:1 является объединённой, она содержит 4 строки (rowspan=4) и 3 столбца (colspan=3).
'VB Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.IsMergedCell(2, 1) Dim isMergedCell_1 As Boolean = rgrid.CurrentWorksheet.Cells(1, 2).IsMergedCell Dim rowspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetRowspan() Dim colspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetColspan() 'Dim output As ReoGridCell = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input) 'Dim outputRange As ReoGridRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange) rgrid.CurrentWorksheet.IsValidCell(2, 2) ' true rgrid.CurrentWorksheet.IsValidCell(2, 3) ' false
//C# bool isMergedCell = rgrid.CurrentWorksheet.IsMergedCell(2, 1); bool isMergedCell_1 = rgrid.CurrentWorksheet.Cells[1, 2].IsMergedCell; int rowspan = rgrid.CurrentWorksheet.Cells[1, 2].GetRowspan(); int colspan = rgrid.CurrentWorksheet.Cells[1, 2].GetColspan(); //ReoGridCell output = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input()); //ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange); rgrid.CurrentWorksheet.IsValidCell(2, 2); //true rgrid.CurrentWorksheet.IsValidCell(2, 3); //false
Объединение ячеек и группировка
Немного об особенностях объединения ячеек. Так как Reogrid обычно работает с выделенными диапазонами ячеек, то нужно предусматривать проверку: выбрана одна ячейка или более одной.
1. Объединение ячеек
'VB If rgrid.CurrentWorksheet.SelectionRange.Rows = 1 And rgrid.CurrentWorksheet.SelectionRange.Cols = 1 Then MessageBox.Show("Выбранный диапазон должен состоять хотя бы из двух ячеек.") Else Try rgrid.CurrentWorksheet.MergeRange(rgrid.CurrentWorksheet.SelectionRange) Catch 'RangeIntersectionException MessageBox.Show("Невозможно объединить пересекающиеся диапазоны.") End Try End If
//C# if (rgrid.CurrentWorksheet.SelectionRange.Rows == 1 & rgrid.CurrentWorksheet.SelectionRange.Cols == 1) { MessageBox.Show("Выбранный диапазон должен состоять хотя бы из двух ячеек."); } else { try { rgrid.CurrentWorksheet.MergeRange(rgrid.CurrentWorksheet.SelectionRange); //RangeIntersectionException } catch { MessageBox.Show("Невозможно объединить пересекающиеся диапазоны."); } }
3. Разбиение (разделение) ячеек
'VB rgrid.CurrentWorksheet.UnmergeRange(New ReoGridRange(0, 0, 10, 10)) 'Указанный диапазон rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange) 'Выделенный диапазон
//C# rgrid.CurrentWorksheet.UnmergeRange(new ReoGridRange(0, 0, 10, 10)); //Указанный диапазон rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange);//Выделенный диапазон
Примечание. Метод UnmergeRange находит и разбивает все объединённые ячейки указанного диапазона.
4. Группировка (тип данных – Integer)
'VB rgrid.CurrentWorksheet.GroupRows(1, 3) 'Группировка строк: со строки 1, их количество - 3 rgrid.CurrentWorksheet.GroupColumns(1, 3) 'Группировка столбцов: со столбца 1, их количество - 3 rgrid.CurrentWorksheet.UngroupRows(1, 3) 'Разгруппировка строк: со строки 1, их количество - 3 rgrid.CurrentWorksheet.UngroupColumns(1, 3) 'Разгруппировка столбцов: со столбца 1, их количество - 3
//C# rgrid.CurrentWorksheet.GroupRows(1, 3); //Группировка строк: со строки 1, их количество - 3 rgrid.CurrentWorksheet.GroupColumns(1, 3);//Группировка столбцов: со столбца 1, их количество - 3 rgrid.CurrentWorksheet.UngroupRows(1, 3);//Разгруппировка строк: со строки 1, их количество - 3 rgrid.CurrentWorksheet.UngroupColumns(1, 3);//Разгруппировка столбцов: со столбца 1, их количество - 3
Границы (Borders) и фон ячеек
Тип линии задаётся перечислением BorderLineStyle и может принимать значения, показанные в приведённом ниже примере.
Цвет линии задаётся перечислением Color или другим предусмотреным в .Net способом.
Тип границы задаётся перечислением BorderPositions и может принимать значения, показанные в приведённом ниже примере.
'VB 'Объявление экземпляра стиля диапазона ячеек Dim MyStyleBorder1 As New RangeBorderStyle 'Тип линий MyStyleBorder1.Style = BorderLineStyle.BoldDashDot 'Полужирный штрих-точка MyStyleBorder1.Style = BorderLineStyle.BoldDashDotDot 'Полужирный штрих-точка-точка MyStyleBorder1.Style = BorderLineStyle.BoldDashed 'Полужирный штрих MyStyleBorder1.Style = BorderLineStyle.BoldDotted 'Полужирная точка MyStyleBorder1.Style = BorderLineStyle.BoldSolid 'Полужирная сплошная MyStyleBorder1.Style = BorderLineStyle.BoldSolidStrong 'Полужирная сплошная MyStyleBorder1.Style = BorderLineStyle.DashDot 'Штрих-точка MyStyleBorder1.Style = BorderLineStyle.DashDotDot 'Штрих-точка-точка MyStyleBorder1.Style = BorderLineStyle.Dashed 'Штриховая MyStyleBorder1.Style = BorderLineStyle.Dashed2 'Штриховая MyStyleBorder1.Style = BorderLineStyle.Dotted 'Точечная MyStyleBorder1.Style = BorderLineStyle.DoubleLine 'Двойная линия MyStyleBorder1.Style = BorderLineStyle.None 'Без границы MyStyleBorder1.Style = BorderLineStyle.Solid 'Сплошная 'Цвета линий MyStyleBorder1.Color = Color.Green 'Цвет из палитры .Net MyStyleBorder1.Color = unvell.ReoGrid.Graphics.SolidColor.Green 'Цвет из палитры Unvell.Reogrid MyStyleBorder1.Color = Color.FromArgb(127, 127, 127, 127) 'Произвольный цвет с прозрачностью 'Параметры границ диапазона или ячейки rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1) 'Все границы rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Backslash, MyStyleBorder1) 'Диагональная 1 rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Bottom, MyStyleBorder1) 'Нижняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideAll, MyStyleBorder1) 'Все внутренние rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideHorizontal, MyStyleBorder1) 'Внутренние горизонтальные rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideVertical, MyStyleBorder1) 'Внутренние вертикальные rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Left, MyStyleBorder1) 'Левая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.LeftRight, MyStyleBorder1) 'Левая и правая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.None, MyStyleBorder1) 'Отсутсвуют rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Outside, MyStyleBorder1) 'Внешние (ранее использовалось уже устаревшее Outline) rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Right, MyStyleBorder1) 'Правая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Slash, MyStyleBorder1) 'Диагональная 2 rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Top, MyStyleBorder1) 'Верхняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.TopBottom, MyStyleBorder1) 'Верхняя и нижняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.X, MyStyleBorder1) 'Все диагональные
//C# //Объявление экземпляра стиля диапазона ячеек RangeBorderStyle MyStyleBorder1 = new RangeBorderStyle(); //Тип линий MyStyleBorder1.Style = BorderLineStyle.BoldDashDot; //Полужирный штрих-точка MyStyleBorder1.Style = BorderLineStyle.BoldDashDotDot; //Полужирный штрих-точка-точка MyStyleBorder1.Style = BorderLineStyle.BoldDashed; //Полужирный штрих MyStyleBorder1.Style = BorderLineStyle.BoldDotted; //Полужирная точка MyStyleBorder1.Style = BorderLineStyle.BoldSolid; //Полужирная сплошная MyStyleBorder1.Style = BorderLineStyle.BoldSolidStrong; //Полужирная сплошная MyStyleBorder1.Style = BorderLineStyle.DashDot; //Штрих-точка MyStyleBorder1.Style = BorderLineStyle.DashDotDot; //Штрих-точка-точка MyStyleBorder1.Style = BorderLineStyle.Dashed; //Штриховая MyStyleBorder1.Style = BorderLineStyle.Dashed2; //Штриховая MyStyleBorder1.Style = BorderLineStyle.Dotted; //Точечная MyStyleBorder1.Style = BorderLineStyle.DoubleLine; //Двойная линия MyStyleBorder1.Style = BorderLineStyle.None; //Без границы MyStyleBorder1.Style = BorderLineStyle.Solid; //Сплошная //Цвета линий MyStyleBorder1.Color = Color.Green; //Цвет из палитры .Net MyStyleBorder1.Color = unvell.ReoGrid.Graphics.SolidColor.Green; //Цвет из палитры Unvell.Reogrid MyStyleBorder1.Color = Color.FromArgb(127, 127, 127, 127); //Произвольный цвет с прозрачностью //Параметры границ диапазона или ячейки rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1); //Все границы rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Backslash, MyStyleBorder1); //Диагональная 1 rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Bottom, MyStyleBorder1); //Нижняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideAll, MyStyleBorder1); //Все внутренние rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideHorizontal, MyStyleBorder1); //Внутренние горизонтальные rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideVertical, MyStyleBorder1); //Внутренние вертикальные rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Left, MyStyleBorder1); //Левая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.LeftRight, MyStyleBorder1); //Левая и правая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.None, MyStyleBorder1); //Отсутсвуют rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Outside, MyStyleBorder1); //Внешние (ранее использовалось уже устаревшее Outline) rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Right, MyStyleBorder1); //Правая rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Slash, MyStyleBorder1); //Диагональная 2 rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Top, MyStyleBorder1); //Верхняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.TopBottom, MyStyleBorder1); //Верхняя и нижняя rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.X, MyStyleBorder1); //Все диагональные
4. Очистка границ (Clear)
Для очистки границ достаточно задать для них пустой цвет (Color.Empty) или применить функцию
'VB Dim MyStyleBorder2 As New RangeBorderStyle MyStyleBorder2.Color = Color.Empty rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder2) 'или rgrid.CurrentWorksheet.RemoveRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All)
//C# RangeBorderStyle MyStyleBorder2 = new RangeBorderStyle(); MyStyleBorder2.Color = Color.Empty; rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder2); //или rgrid.CurrentWorksheet.RemoveRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All);
5. Заливка фона
Фон ячейки может быть как залит определённым цветом, так и текстурой (по шаблону). Ниже приведены примеры настройки границ и заливки фона
'VB Dim MyStyle1 As New WorksheetRangeStyle MyStyle1.Flag = PlainStyleFlag.BackColor MyStyle1.BackColor = Color.Empty 'Очищаем ячейки MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow 'Жёлтый цвет MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Red 'Красный цвет rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle1) 'Фон на основе шаблона Dim MyStylePattern As New WorksheetRangeStyle MyStylePattern.Flag = PlainStyleFlag.FillPattern MyStylePattern.Flag = PlainStyleFlag.BackColor MyStylePattern.BackColor = Color.LightYellow MyStylePattern.FillPatternColor = Color.SkyBlue MyStylePattern.FillPatternStyle = unvell.ReoGrid.Graphics.RGHatchStyle.DiagonalBrick rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern)
//C# WorksheetRangeStyle MyStyle1 = new WorksheetRangeStyle(); MyStyle1.Flag = PlainStyleFlag.BackColor; MyStyle1.BackColor = Color.Empty;//Очищаем ячейки MyStyle1.BackColor = Color.Red;//Красный цвет MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow;//Жёлтый цвет rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle1); //Фон на основе шаблона WorksheetRangeStyle MyStylePattern = new WorksheetRangeStyle(); MyStylePattern.Flag = PlainStyleFlag.FillPattern; MyStylePattern.Flag = PlainStyleFlag.BackColor; MyStylePattern.BackColor = Color.LightYellow; MyStylePattern.FillPatternColor = Color.SkyBlue; MyStylePattern.FillPatternStyle = unvell.ReoGrid.Graphics.RGHatchStyle.DiagonalBrick; rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern);
Масштабирование (Zoom in/out)
Масштабирование может производиться как с помощью вращения колёсика мыши при зажатой клавише CTRL, так и программно
Ниже показаны примеры работы с масштабированием:
- Выбор значения масштаба из списка (событие TextChanged для раскрывающегося списка cboZoom, содержащего пункты вроде “10 %”).
- Увеличение масштаба на 10%.
- Уменьшение масштаба на 10%.
- Сброс масштаба к значению 100%.
- Установка единицы масштаба.
'VB rgrid.CurrentWorksheet.ScaleFactor = Convert.ToSingle(Val(cboZoom.Text.Replace("%", String.Empty).Trim)) / 100.0F rgrid.CurrentWorksheet.ZoomIn() rgrid.CurrentWorksheet.ZoomOut() rgrid.CurrentWorksheet.ZoomReset() rgrid.CurrentWorksheet.SetScale(2.0F)
//C# rgrid.CurrentWorksheet.ScaleFactor = Convert.ToSingle(cboZoom.Text.Replace("%", string.Empty)) / 100.0F; rgrid.CurrentWorksheet.ZoomIn(); rgrid.CurrentWorksheet.ZoomOut(); rgrid.CurrentWorksheet.ZoomReset(); rgrid.CurrentWorksheet.SetScale(2.0F);
Получение данных о выбранном диапазоне
Этот код необходим для настройки пользовательского интерфейса при выборе пользователем другой ячейки или диапазона. Данный код работает в обработчике события SelectionRangeChanged компонента Reogrid
'VB If e.Range.IsEmpty = True Then MsgBox("Выбран пустой диапазон") : Exit Sub 'Ничего не выбрано - можно не продолжать lblStatus.Text = "Выделенный диапазон: " & rgrid.CurrentWorksheet.SelectionRange.ToString() Dim MyStyle As New WorksheetRangeStyle 'Создаём экземпляр стиля MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange) cboFontName.Text = MyStyle.FontName 'Гарнитура шрифта cboFontSize.Text = Convert.ToString(MyStyle.FontSize) 'Кегль шрифта (размер) chkFontBold.Checked = MyStyle.Bold 'Полужирный chkFontItalic.Checked = MyStyle.Italic 'Курсив chkFontUnderline.Checked = MyStyle.Underline 'Подчёркнутый chkFontStrike.Checked = MyStyle.Strikethrough 'Зачёркнутый 'grpBackgroundColor.BackColor = MyStyle.BackColor 'Цвет фона 'MyStyle.CopyFrom 'MyStyle.FillPatternColor 'MyStyle.FillPatternStyle 'Выравнивание по левому краю If MyStyle.HAlign = ReoGridHorAlign.Left Then radTextAlignLeft.Checked = True Else radTextAlignLeft.Checked = False End If 'Горизонтальная центровка If MyStyle.HAlign = ReoGridHorAlign.Center Then radTextAlignCenter.Checked = True Else radTextAlignCenter.Checked = False End If 'Выравнивание по правому краю If MyStyle.HAlign = ReoGridHorAlign.Right Then radTextAlignRight.Checked = True Else radTextAlignRight.Checked = False End If 'Распределённый отступ If MyStyle.HAlign = ReoGridHorAlign.DistributedIndent Then radTextDisributedIndent.Checked = True Else radTextDisributedIndent.Checked = False End If 'MyStyle.HAlign.General 'MyStyle.Padding 'grpTextColor.BackColor = MyStyle.TextColor 'Цвет текста chkTextWrap.Checked = Convert.ToBoolean(MyStyle.TextWrapMode) 'Перенос по словам 'Вертикальное выравнивание: Сверху If MyStyle.VAlign = ReoGridVerAlign.Top Then radTextAlignTop.Checked = True Else radTextAlignTop.Checked = False End If 'Вертикальное выравнивание: Посередине If MyStyle.VAlign = ReoGridVerAlign.Middle Then radTextAlignMiddle.Checked = True Else radTextAlignMiddle.Checked = False End If 'Вертикальное выравнивание: Снизу If MyStyle.VAlign = ReoGridVerAlign.Bottom Then radTextAlignBottom.Checked = True Else radTextAlignBottom.Checked = False End If
//C# if (e.Range.IsEmpty == true){MessageBox.Show("Выбран пустой диапазон");return; } //Ничего не выбрано - можно не продолжать lblStatus.Text = "Выделенный диапазон: " + rgrid.CurrentWorksheet.SelectionRange.ToString(); WorksheetRangeStyle MyStyle = new WorksheetRangeStyle(); //Создаём экземпляр стиля MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange); cboFontName.Text = MyStyle.FontName; //Гарнитура шрифта cboFontSize.Text = Convert.ToString(MyStyle.FontSize); //Кегль шрифта (размер) chkFontBold.Checked = MyStyle.Bold; //Полужирный chkFontItalic.Checked = MyStyle.Italic; //Курсив chkFontUnderline.Checked = MyStyle.Underline; //Подчёркнутый chkFontStrike.Checked = MyStyle.Strikethrough; //Зачёркнутый //grpBackgroundColor.BackColor = MyStyle.BackColor; //Цвет фона //MyStyle.CopyFrom //MyStyle.FillPatternColor //MyStyle.FillPatternStyle //Выравнивание по левому краю if (MyStyle.HAlign == ReoGridHorAlign.Left) { radTextAlignLeft.Checked = true; } else { radTextAlignLeft.Checked = false; } //Горизонтальная центровка if (MyStyle.HAlign == ReoGridHorAlign.Center) { radTextAlignCenter.Checked = true; } else { radTextAlignCenter.Checked = false; } //Выравнивание по правому краю if (MyStyle.HAlign == ReoGridHorAlign.Right) { radTextAlignRight.Checked = true; } else { radTextAlignRight.Checked = false; } //Распределённый отступ if (MyStyle.HAlign == ReoGridHorAlign.DistributedIndent) { radTextDisributedIndent.Checked = true; } else { radTextDisributedIndent.Checked = false; } //MyStyle.HAlign.General //MyStyle.Padding //grpTextColor.BackColor = MyStyle.TextColor; //Цвет текста chkTextWrap.Checked = Convert.ToBoolean(MyStyle.TextWrapMode); //Перенос по словам //Вертикальное выравнивание: Сверху if (MyStyle.VAlign == ReoGridVerAlign.Top) { radTextAlignTop.Checked = true; } else { radTextAlignTop.Checked = false; } //Вертикальное выравнивание: Посередине if (MyStyle.VAlign == ReoGridVerAlign.Middle) { radTextAlignMiddle.Checked = true; } else { radTextAlignMiddle.Checked = false; } //Вертикальное выравнивание: Снизу if (MyStyle.VAlign == ReoGridVerAlign.Bottom) { radTextAlignBottom.Checked = true; } else { radTextAlignBottom.Checked = false; }
Диаграммы (Charts)
Могут быть созданы в Reogrid или быть загружены из файла в формате xlsx
Всего доступно 4 вида диаграмм: линейная (Line Chart), круговая (Pie 2D Chart), гистограмма (Column Chart), горизонтальная гистограмма (BarChart). Последние три доступны лишь в версии Pro.
Создание линейной диаграммы
Процесс состоит из нескольких этапов:
- создаём источник данных (если он не существует), определяем расположение данных;
- создаём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка;
- указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB 'Подготовка источника данных. Dim worksheet = Me.rgrid.CurrentWorksheet worksheet("A2") = New Object(,) { {Nothing, 2008, 2009, 2010, 2011, 2012}, {"Город 1", 3, 2, 4, 2, 6}, {"Город 2", 7, 5, 3, 6, 4}, {"Город 3", 13, 10, 9, 10, 9}, {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)"}} 'Указываем диапазон ячеек с данными и выделяем диапазон Dim dataRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("B3:F5") Dim serialNamesRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("A3:A6") Dim categoryNamesRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(categoryNamesRange) worksheet.AddHighlightRange(serialNamesRange) worksheet.AddHighlightRange(dataRange) '1 Dim lineChart As unvell.ReoGrid.Chart.LineChart = New unvell.ReoGrid.Chart.LineChart lineChart.Location = New Graphics.Point(10, 200) lineChart.Size = New Graphics.Size(400, 320) lineChart.Title = "Пример линейной диаграммы" '2 lineChart.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, serialNamesRange, dataRange) lineChart.DataSource.RowTitleRange = serialNamesRange lineChart.DataSource.ColTitleRange = categoryNamesRange worksheet.FloatingObjects.Add(lineChart)
//C# //Подготовка источника данных. Worksheet worksheet = this.rgrid.CurrentWorksheet; worksheet["A2"] = new object[,] { { null, 2008, 2009, 2010, 2011, 2012 }, { "Город 1", 3, 2, 4, 2, 6 }, { "Город 2", 7, 5, 3, 6, 4 }, { "Город 3", 13, 10, 9, 10, 9 }, { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)" }, }; //Указываем диапазон ячеек с данными и выделяем диапазон var dataRange = worksheet.Ranges["B3:F5"]; var serialNamesRange = worksheet.Ranges["A3:A6"]; var categoryNamesRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(categoryNamesRange); worksheet.AddHighlightRange(serialNamesRange); worksheet.AddHighlightRange(dataRange); //1 unvell.ReoGrid.Chart.LineChart lineChart = new unvell.ReoGrid.Chart.LineChart(); lineChart.Location = new unvell.ReoGrid.Graphics.Point(440, 20); lineChart.Size = new unvell.ReoGrid.Graphics.Size(400, 260); lineChart.Title = "Пример линейной диаграммы"; //2 lineChart.DataSource = new WorksheetChartDataSource(worksheet, serialNamesRange, dataRange); lineChart.DataSource.RowTitleRange = serialNamesRange; lineChart.DataSource.ColTitleRange = categoryNamesRange; worksheet.FloatingObjects.Add(lineChart);
Создание вертикальной гистограммы (Pro).
Процесс состоит из нескольких этапов:
- Размещаем данные в таблице.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB '1 Dim worksheet = Me.rgrid.CurrentWorksheet worksheet("A2") = New Object(,) { {Nothing, 2008, 2009, 2010, 2011, 2012}, {"Город 1", 3, 2, 4, 2, 6}, {"Город 2", 7, 5, 3, 6, 4}, {"Город 3", 13, 10, 9, 10, 9}, {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)"}} '2 Dim dataRange = worksheet.Ranges("B3:F5") Dim rowTitleRange = worksheet.Ranges("A3:A6") Dim colTitleRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(rowTitleRange) worksheet.AddHighlightRange(colTitleRange) worksheet.AddHighlightRange(dataRange) '3 Dim c1 As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.ColumnChart c1.Location = New Graphics.Point(10, 140) c1.Size = New Graphics.Size(400, 320) c1.Title = "Пример гистограммы" '4 c1.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange) c1.DataSource.RowTitleRange = rowTitleRange c1.DataSource.ColTitleRange = colTitleRange worksheet.FloatingObjects.Add(c1)
//C# //1 Worksheet worksheet = this.rgrid.CurrentWorksheet; worksheet["A2"] = new object[,] { { null, 2008, 2009, 2010, 2011, 2012 }, { "Город 1", 3, 2, 4, 2, 6 }, { "Город 2", 7, 5, 3, 6, 4 }, { "Город 3", 13, 10, 9, 10, 9 }, { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)" }, }; //2 var dataRange = worksheet.Ranges["B3:F5"]; var rowTitleRange = worksheet.Ranges["A3:A6"]; var colTitleRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(rowTitleRange); worksheet.AddHighlightRange(colTitleRange); worksheet.AddHighlightRange(dataRange); //3 unvell.ReoGrid.Chart.Chart c1 = new unvell.ReoGrid.Chart.ColumnChart(); c1.Location = new unvell.ReoGrid.Graphics.Point(10, 140); c1.Size = new unvell.ReoGrid.Graphics.Size(400, 320); c1.Title = "Пример гистограммы"; //4 c1.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange); c1.DataSource.RowTitleRange = rowTitleRange; c1.DataSource.ColTitleRange = colTitleRange; worksheet.FloatingObjects.Add(c1);
Создание круговой 2D диаграммы Pie (Pro)
- Создаём лист и добавляем данные.
- Определяем два диапазона: источник данных и заголовки, добавляем эти диапазоны в коллекцию
- Создаём экземпляр диаграммы, задаём заголовок, источники данных. После этого добавляем её в коллекцию диаграмм.
'VB '1 Dim worksheet As unvell.ReoGrid.Worksheet = Me.rgrid.CurrentWorksheet worksheet("A2") = New Object(,) { {Nothing, 2008, 2009, 2010, 2011, 2012}, {"Город 1", 3, 2, 4, 2, 6}} '2 Dim dataRange = worksheet.Ranges("B3:F3") Dim titleRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(dataRange) worksheet.AddHighlightRange(titleRange) '3 Dim cpie As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.Pie2DChart cpie.Location = New Graphics.Point(10, 140) cpie.Size = New Graphics.Size(400, 320) cpie.Title = "Пример круговой 2D диаграммы" cpie.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange) cpie.DataSource.CategoryNameRange = titleRange worksheet.FloatingObjects.Add(cpie)
//C# //1 Worksheet worksheet = this.rgrid.CurrentWorksheet; worksheet["A2"] = new object[,] { { null, 2008, 2009, 2010, 2011, 2012 }, { "Город 1", 3, 2, 4, 2, 6 }, }; //2 var dataRange = worksheet.Ranges["B3:F3"]; var titleRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(dataRange); worksheet.AddHighlightRange(titleRange); //3 unvell.ReoGrid.Chart.Pie2DChart cpie = new unvell.ReoGrid.Chart.Pie2DChart(); cpie.Location = new unvell.ReoGrid.Graphics.Point(10, 140); cpie.Size = new unvell.ReoGrid.Graphics.Size(400, 320); cpie.Title = "Пример круговой 2D диаграммы"; cpie.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange); cpie.DataSource.CategoryNameRange = titleRange; worksheet.FloatingObjects.Add(cpie);
Создание горизонтальной гистограммы. Процесс состоит из нескольких этапов (Pro)
- Подготовка источника данных.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB '1 Dim worksheet As unvell.ReoGrid.Worksheet = Me.rgrid.CurrentWorksheet worksheet("A2") = New Object(,) { {Nothing, 2008, 2009, 2010, 2011, 2012}, {"Город 1", 3, 2, 4, 2, 6}, {"Город 2", 7, 5, 3, 6, 4}, {"Город 3", 13, 10, 9, 10, 9}, {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)"}} '2 Dim dataRange = worksheet.Ranges("B3:F5") Dim rowTitleRange = worksheet.Ranges("A3:A6") Dim colTitleRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(rowTitleRange) worksheet.AddHighlightRange(colTitleRange) worksheet.AddHighlightRange(dataRange) '3 Dim cbar As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.BarChart cbar.Location = New Graphics.Point(10, 140) cbar.Size = New Graphics.Size(400, 320) cbar.Title = "Пример горизонтальной гистограммы" '4 cbar.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange) cbar.DataSource.RowTitleRange = rowTitleRange cbar.DataSource.ColTitleRange = colTitleRange worksheet.FloatingObjects.Add(cbar)
//C# //1 var worksheet = this.rgrid.CurrentWorksheet; worksheet["A2"] = new object[,] { { null, 2008, 2009, 2010, 2011, 2012 }, { "Город 1", 3, 2, 4, 2, 6 }, { "Город 2", 7, 5, 3, 6, 4 }, { "Город 3", 13, 10, 9, 10, 9 }, { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)" }, }; //2 var dataRange = worksheet.Ranges["B3:F5"]; var rowTitleRange = worksheet.Ranges["A3:A6"]; var colTitleRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(rowTitleRange); worksheet.AddHighlightRange(colTitleRange); worksheet.AddHighlightRange(dataRange); //3 unvell.ReoGrid.Chart.Chart cbar = new unvell.ReoGrid.Chart.BarChart(); cbar.Location = new unvell.ReoGrid.Graphics.Point(10, 140); cbar.Size = new unvell.ReoGrid.Graphics.Size(400, 320); cbar.Title = "Пример горизонтальной гистограммы"; //4 cbar.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange); cbar.DataSource.RowTitleRange = rowTitleRange; cbar.DataSource.ColTitleRange = colTitleRange; worksheet.FloatingObjects.Add(cbar);
Плавающие объекты (Pro)
ReoGrid поддерживает рисуемые объекты, создание на листе диаграмм, плавающих изображений и отображения графических примитивов: прямоугольников, линий, прямоугольников со скруглёнными углами. Также поддерживается считывание плавающих объектов из файла Excel; используя этот функционал, .Net-приложениях можно отображать основанные на Excel отчёты с рисунками и диаграммами.
Плавающие объекты вынесены в новое свойство листа, через которое возможен полный доступ к ним: worksheet.FloatingObjects()
Поддержка Excel
Плавающие объекты будут автоматически загружаться из файла Excel и сохраняться в нём.
Создание плавающих объектов
Пример 1. Создание объекта-прямоугольника. Выполняются следующие действия:
- Создание экземпляра прямоугольника, задание его расположения и размеров.
- Добавление плавающего объекта на лист. Для этого нужно добавить его в коллекцию плавающих объектов. В данном случае получаем текущий лист и пополняем его коллекцию.
'VB Dim rectObj As unvell.ReoGrid.Drawing.Shapes.RectangleShape = New unvell.ReoGrid.Drawing.Shapes.RectangleShape() rectObj.Location = New Graphics.Point(50, 50) rectObj.Size = New Graphics.Size(200, 100) Dim worksheet As unvell.ReoGrid.Worksheet = rgrid.CurrentWorksheet 'Control.CurrentWorksheet worksheet.FloatingObjects.Add(rectObj)
//C# unvell.ReoGrid.Drawing.Shapes.RectangleShape rectObj = new unvell.ReoGrid.Drawing.Shapes.RectangleShape(); rectObj.Location = new unvell.ReoGrid.Graphics.Point(50, 50); rectObj.Size = new unvell.ReoGrid.Graphics.Size(200, 100); Worksheet worksheet = this.rgrid.CurrentWorksheet; worksheet.FloatingObjects.Add(rectObj);
Результат:
Пример 2. Добавление плавающего изображения (полный функционал доступен в версии Pro)
- Получаем текущий лист.
- Создаём изображение из файла.
- Добавляем изображение на лист с указанием расположения.
'VB Dim worksheet1 = Me.rgrid.CurrentWorksheet Dim image1 As System.Drawing.Image = My.Resources.photo 'Image.FromFile("Sample.png") worksheet1.FloatingObjects.Add(New Drawing.ImageObject(image1)) worksheet1.FloatingObjects(0).Location = New Graphics.Point(40, 30)
//C# Worksheet worksheet1 = this.rgrid.CurrentWorksheet; System.Drawing.Image image1 = reogrid_test_CSharp.Properties.Resources.photo; //Image.FromFile("Sample.png"); worksheet1.FloatingObjects.Add(new unvell.ReoGrid.Drawing.ImageObject(image1)); worksheet1.FloatingObjects[0].Location = new unvell.ReoGrid.Graphics.Point(40, 30);
Результат:
Отображение текста в формате RTF (Rich format text) (доступно в версии Pro)
Данный формат представлен в виде класса unvell.ReoGrid.Drawing.RichText()
Экземпляр этого класса представляет собой объект, который можно отобразить внутри ячейки или в рисуемых объектах.
Для отображения форматированного текста в рисуемых объектах, нужно создать экземпляр класса RichText, добавить в него текст, поместить экземпляр класса в рисуемые объекты.
Рассмотрим пример: отображение текста в ячейке
Для этого потребуется создать экземпляр класса RichText, добавить в него текст и поместить в ячейку.
- Выбираем лист;
- Создаём экземпляр класса RichText;
- Добавляем фрагмент текста чёрного цвета;
- Добавляем фрагмент текста с указанием гарнитуры шрифта, кегля (размера), цвета и стиля: Arial, 10пт, тёмно-синий, полужирный;
- Добавляем ещё три фрагмента – каждый своим цветом;
- Помещаем полученный экземпляр класса в ячейку.
'VB Dim worksheet As Worksheet = rgrid.CurrentWorksheet Dim rt As unvell.ReoGrid.Drawing.RichText = New unvell.ReoGrid.Drawing.RichText() rt.AddText("Фрагмент ", unvell.ReoGrid.Graphics.SolidColor.Black) rt.AddText("текста ", "Arial", 10.25F, unvell.ReoGrid.Graphics.SolidColor.DarkBlue, unvell.ReoGrid.Graphics.SolidColor.Transparent, Drawing.Text.FontStyles.Bold) rt.AddText("должен отобразиться ", unvell.ReoGrid.Graphics.SolidColor.Black) rt.AddText("красным цветом", unvell.ReoGrid.Graphics.SolidColor.Red) rt.AddText(".", unvell.ReoGrid.Graphics.SolidColor.Black) worksheet("B2") = rt
//C# Worksheet worksheet = this.rgrid.CurrentWorksheet; unvell.ReoGrid.Drawing.RichText rt = new unvell.ReoGrid.Drawing.RichText(); rt.AddText("Фрагмент ", unvell.ReoGrid.Graphics.SolidColor.Black); rt.AddText("текста ", "Arial", 10.25f, unvell.ReoGrid.Graphics.SolidColor.DarkBlue, unvell.ReoGrid.Graphics.SolidColor.Transparent, unvell.ReoGrid.Drawing.Text.FontStyles.Bold); rt.AddText("должен отобразиться ", unvell.ReoGrid.Graphics.SolidColor.Black); rt.AddText("красным цветом", unvell.ReoGrid.Graphics.SolidColor.Red); rt.AddText(".", unvell.ReoGrid.Graphics.SolidColor.Black); worksheet["B2"] = rt;
Результат:
Пара примеров функций из англоязычной документации
Данный код можно поместить в обработчики событий Click кнопок.
Пример 1. Настраиваемые заголовки
'VB rgrid.CurrentWorksheet.Resize(10, 7) 'Меняем размер и получаем 10 строк и 7 столбцов 'Приводим стиль первого заголовка к типу "Флажок" (Сheckbox) Dim checkBoxHeader = rgrid.CurrentWorksheet.ColumnHeaders(0) checkBoxHeader.Text = String.Empty 'checkBoxHeader.DefaultCellBody = TypeOf(CheckBoxCell) checkBoxHeader.Width = 30 'Ширина заголовка: 30 пикселей checkBoxHeader.Style.HorizontalAlign = ReoGridHorAlign.Center checkBoxHeader.Style.Padding = New unvell.ReoGrid.PaddingValue(3) 'Установка других заголовков rgrid.CurrentWorksheet.ColumnHeaders(1).Text = "Продукт" rgrid.CurrentWorksheet.ColumnHeaders(2).Text = "Цена за единицу" rgrid.CurrentWorksheet.ColumnHeaders(3).Text = "Скидка" rgrid.CurrentWorksheet.ColumnHeaders(4).Text = "Количество" rgrid.CurrentWorksheet.ColumnHeaders(5).Text = "Расширенная цена" rgrid.CurrentWorksheet.ColumnHeaders(6).Text = "Примечание" 'устанавливаем ширину столбцов (1-4) rgrid.CurrentWorksheet.SetColumnsWidth(1, 5, 100) 'Включение режима выделения только одной ячейки rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell 'Определение региона как диапазона записей Dim recordRange = rgrid.CurrentWorksheet.DefineNamedRange("records", 0, 0, 4, 6) 'Применение формулы с использованием относительного адреса в порядке для подсчёта каждой строки 'Итоговая цена = (цена за единицу - скидка) * количество Dim extendedPriceFormula = "=( INDIRECT(ADDRESS(ROW(), COLUMN()-3)) " & " - INDIRECT(ADDRESS(ROW(), COLUMN()-2)) )" & " * INDIRECT(ADDRESS(ROW(), COLUMN()-1) )" 'Вводим данные recordRange.Data = New Object(,) { {False, "Процессор", "230", "0", "1", extendedPriceFormula}, {True, "Системная плата", "120", "5", "1", extendedPriceFormula}, {False, "Память", "90", "0", "2", extendedPriceFormula}, {False, "VGA", "310", "0", "1", extendedPriceFormula} } 'Сбрасываем стиль курсора для ячеек к обычному виду rgrid.CellsSelectionCursor = Cursors.Default 'Получаем формулу из выбранной ячейки и отображаем её 'AddHandler rgrid.CurrentWorksheet.FocusPosChanged, AddressOf rGrid_FocusPosChanged 'Sub rGrid_FocusPosChanged(sender,e) 'lblStatus.Text = rgrid.CurrentWorksheet.GetCellFormula(rgrid.CurrentWorksheet.FocusPos) 'End Sub
//C# rgrid.CurrentWorksheet.Resize(10, 7); //Меняем размер и получаем 10 строк и 7 столбцов //Приводим стиль первого заголовка к типу "Флажок" (Сheckbox) dynamic checkBoxHeader = rgrid.CurrentWorksheet.ColumnHeaders[0]; checkBoxHeader.Text = string.Empty; //checkBoxHeader.DefaultCellBody = TypeOf(CheckBoxCell) checkBoxHeader.WidthInPixel = 30; //Ширина заголовка: 30 пикселей checkBoxHeader.Style.HorizontalAlign = ReoGridHorAlign.Center; checkBoxHeader.Style.Padding = new unvell.ReoGrid.PaddingValue(3); //Установка других заголовков rgrid.CurrentWorksheet.ColumnHeaders[1].Text = "Продукт"; rgrid.CurrentWorksheet.ColumnHeaders[2].Text = "Цена за единицу"; rgrid.CurrentWorksheet.ColumnHeaders[3].Text = "Скидка"; rgrid.CurrentWorksheet.ColumnHeaders[4].Text = "Количество"; rgrid.CurrentWorksheet.ColumnHeaders[5].Text = "Расширенная цена"; rgrid.CurrentWorksheet.ColumnHeaders[6].Text = "Примечание"; //устанавливаем ширину столбцов (1-4) rgrid.CurrentWorksheet.SetColumnsWidth(1, 5, 100); //Включение режима выделения только одной ячейки rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell; //Определение региона как диапазона записей dynamic recordRange = rgrid.CurrentWorksheet.DefineNamedRange("records", 0, 0, 4, 6); //Применение формулы с использованием относительного адреса в порядке для подсчёта каждой строки //Итоговая цена = (цена за единицу - скидка) * количество dynamic extendedPriceFormula = "=( INDIRECT(ADDRESS(ROW(), COLUMN()-3)) " + " - INDIRECT(ADDRESS(ROW(), COLUMN()-2)) )" + " * INDIRECT(ADDRESS(ROW(), COLUMN()-1) )"; //Вводим данные recordRange.Data = new object[ , ] { {false,"Процессор","230","0","1",extendedPriceFormula}, {true,"Системная плата","120","5","1",extendedPriceFormula}, {false,"Память","90","0","2",extendedPriceFormula}, {false,"VGA","310","0","1",extendedPriceFormula} }; //Сбрасываем стиль курсора для ячеек к обычному виду rgrid.CellsSelectionCursor = Cursors.Default; //Получаем формулу из выбранной ячейки и отображаем её /*rgrid.CurrentWorksheet.FocusPosChanged += rGrid_FocusPosChanged; public void rGrid_FocusPosChanged(sender, e) { lblStatus.Text = rgrid.CurrentWorksheet.GetCellFormula(rgrid.CurrentWorksheet.FocusPos); }*/
Пример 2. Определение разрешённого для редактирования диапазона
Многие события, происходящие перед основными, поддерживают свойство IsCancelled. Если его установить в True, Reogrid отменит соответствующую операцию. Обычно используется для предотвращения правки ячеек или операций сворачивания/разворачивания
'VB 'Пример: текст можно править лишь в чётко определённом диапазоне: Dim editableRange = New ReoGridRange(3, 1, 2, 3) rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, RangeBorderStyle.BlackSolid) rgrid.CurrentWorksheet(2, 1) = "Правка разрешена только для этого диапазона:" 'AddHandler rgrid.CurrentWorksheet.BeforeCellEdit, AddressOf rgrid_BeforeCellEdit 'Sub rgrid_BeforeCellEdit(ByVal sender, ByVal e) 'e.IsCancelled = Not rgrid.CurrentWorksheet(1, 1, 2, 2).Contains(e.Cell.GetPos()) 'End Sub
//C# //Пример: текст можно править лишь в чётко определённом диапазоне: { ReoGridRange editableRange = new ReoGridRange(3, 1, 2, 3); rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, RangeBorderStyle.BlackSolid); rgrid.CurrentWorksheet[2, 1] = "Правка разрешена только для этого диапазона:"; //rgrid.CurrentWorksheet.BeforeCellEdit += rgrid_BeforeCellEdit; } /*public void rgrid_BeforeCellEdit(sender, e) { e.IsCancelled = !rgrid.CurrentWorksheet(1, 1, 2, 2).Contains(e.Cell.GetPos()); }*/
Руководство подготовлено для сайта reogrid.net.
Может содержать некоторые неточности и ошибок в плане оформления.
Программный код проверялся для VB.Net/С# 2012 синтаксическим анализатором Visual Studio. Код на Visual Basic проверен тестовым приложением.
Использованы изображения из английской версии руководства, а также снимок экрана из проекта Euro Truck Simulator 2