Оглавление
- Пространства имён
- Книга в памяти (виртуальная книга)
- Манипулирование листами книги
- Основные (простые) действия над ячейками и диапазонами ячеек
- Типы ячеек
- Форматы данных
- Встроенные шаблоны форматирования данных
- Управление параметрами книги или листа
- Обработка событий
- Внешний вид компонента и локализация
- Инициализация списков
- Cовместимость с форматом Excel
- Формула (Formula)
- Фиксация ячеек
- Изменение размеров таблицы
- Стили
- Шрифты и содержимое ячеек
- Перенос слов
- Выравнивание
- Заливка фона
- Поворот текста в ячейке
- Границы (Borders)
- Получение данных о выбранном диапазоне
- Объединение, разбивка и группировка ячеек
- Масштабирование
- Линейная диаграмма
- Вертикальная гистограмма
- Горизонтальная гистограмма
- Круговая 2D диаграмма
- Диаграмма с областями
- Кольцевая диаграмма
Первое знакомство
Поддерживаемые платформы
ReoGrid поддерживает технологии Windows Form и WPF. Поэтому в архиве с файлами компонента приведено два варианта компонента: WPF-версия содержит эти три буквы в названии папки.
Все редакции ReoGrid поддерживают клиентский профиль (.NET Client profile) версии 3.5. Код примеров данного руководства выполнялся в .NET Client profile 4.
Поддерживаемые форматы файлов
ReoGrid в разной степени поддерживает 4 формата файлов.
Формат | Пояснение |
---|---|
rgf | Собственный формат хранения данных, в его основе лежит расширяемый язык разметки XML. Данные можно как сохранять, как и загружать. |
xlsx | Формат хранения данных Microsoft Excel 2007 и более новых версий. Данные можно как сохранять, как и загружать. |
csv | Простой формат для хранения табличных данных в текстовом файле. Данные можно как сохранять, как и загружать, но только для одного листа. |
html | Документ на языке гипертекстовой разметки. Данные листа можно лишь экспортировать в данный формат, загрузка данных из такого файла не предусмотрена. |
Особенности распространения и поддержки
ReoGrid, начиная с версии 1.3.0, распространяется под лицензией MIT. Из платных возможностей остались: техническая поддержка на русском, украинском, английском, японском и китайском языках и запросы на функционал под заказ. Подробнее можно узнать этой на странице.
Выбор редакции
Компонент ReoGrid доступен в нескольких редакциях
Редакция | Пояснение |
---|---|
Минимальная (Minimum или WPFMinimum) | Содержит лишь библиотеку unvell.ReoGrid.dll. Доступны все основные функции. |
Стандартная (Release) | Все основные функции и вычисление формул |
Расширенная (Extension или WPFExtension) | Помимо указанных выше, содержит библиотеки для работы со сценариями: unvell.ReoScript.dll и unvell.ReoScript.EditorLib.dll. Также в состав этой редакции входят два сторонних компонента: Antlr3.Runtime.dll и FastColoredTextBox.dll (Windows Form). |
Подключение или обновление ReoGrid
Первое подключение
- Копируем библиотеки компонента в папку Debug и/или Release вашего проекта.
- В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
- В свойствах панели элементов управления выбираем пункт “Выбрать
компоненты”, указываем на библиотеку ReoGrid и выбираем подключаемые компоненты. - Если всё сделано верно, то в панели элементов управления появится ReoGrid.
Обновление
- Переходим к свойствам проекта. В разделе “Ссылки” удаляем все ссылки на библиотеки ReoGrid.
- Из папки проекта Debug и/или Release вашего проекта удаляем файлы устаревшей сборки ReoGrid.
- Копируем файлы новой версии в папку Debug / Release вашего проекта.
- В свойствах проекта, разделе “Ссылки” добавляем ссылки на библиотеки ReoGrid.
- Перестраиваем проект (в главном меню пункт ПОСТРОЕНИЕ – Перестроить Название проекта).
Введение
Терминология, необходимая для работы с ReoGrid, во многом аналогична таковой у Microsoft Excel. Здесь также присутствуют: Книги (Workbooks), Листы (WorkSheets), ячейки (Cells). В ячейках так же можно хранить как значения в основных форматах (текстовом, числовом, денежном, …), так и формулы с использованием ряда функций, совместимых с английской и русской версиями Excel.
Экземпляр компонента (он же экземпляр класса IWorkbook) изначально содержит один Лист. Он доступен по псевдониму Currentworksheet (текущий лист).
Далее подразумевается, что в основную форму проекта (Windows Forms) добавлен экземпляр компонента ReoGrid с именем rgrid.
Новые листы книги могут создаваться как визуально – c использованием встроенного в ReoGrid вкладочного элемента (TabControl), так и программно – путём создания экземпляра объекта WorkSheet с последующим его добавлением в состав книги.
Пора начинать
Рассмотрим основные моменты работы с компонентом на конкретных примерах. То есть, на основе рассмотренных ниже фрагментов кода можно собрать работоспособный редактор электронных таблиц. Изначально подразумевается, что на форму добавлен компонент ReoGrid с именем rgrid.
Необходимые пространства имён (Namespaces)
Для создания редактора редактора электронных таблиц будет достаточно подключить следующие пространства имён:
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 'Диаграммы Imports unvell.ReoGrid.Events
using System.IO; using System.Text; using System; using System.Windows.Forms; using System.Drawing; using System.Diagnostics; using System.ComponentModel; using unvell.ReoGrid; //Сам компонент using unvell.ReoGrid.CellTypes; //Типы ячеек using unvell.ReoGrid.Actions; //Действия using unvell.ReoGrid.DataFormat; //Форматы данных using unvell.ReoGrid.Print; //Печать using unvell.ReoGrid.Chart; //Диаграммы
Книга в памяти (виртуальная книга)
Помимо визуальной формы, ReoGrid может создавать виртуальную книгу (“книгу в памяти”, “Memory workbook”).
Виртуальная книга отличается от обычной отсутствием графического интерфейса и соответствующих свойств, событий, методов и действий, включая отмену/повтор действий. Требует гораздо меньше ресурсов компьютера, идеально подходит для выполнения некоторых фоновых задач, например: по полученным сведениям составить отчёт и сохранить его в виде файла.
Возможности и ограничения виртуальных книг
Возможности:
- Работа с листами: создание, добавление, вставка, удаление, копирование, перемещение, поиск по имени (GetWorksheetByName) и по индексу (GetWorksheetIndex).
- Коллекция листов (Worksheets).
- Загрузка и сохранение данных: форматы RGF, Excel.
- Все основные события книги.
- Уведомления о возникших исключениях.
Ограничения (функционал недоступен):
- Свойство CurrentWorksheet: у виртуальной книги нет визуального интерфейса, листа по умолчанию и переключателя листов. Управление листами происходит с помощью коллекции Worksheets.
- Методы и события, связанные с прокруткой (Scroll).
- Стили оформления самого компонента.
- Методы, связанные с действиями: DoAction, Undo, Redo и RepeatLastAction. Поэтому все действия выполняются мгновенно и без возможности отмены.
Пример работы с книгой в памяти приведён в конце данного руководства.
Манипулирование листами книги
'Создание экземпляра виртуальной книги Dim workbook = ReoGridControl.CreateMemoryWorkbook() 'Сброс книги (удаление всех листов и создание пустого нового) 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() 'Освобождение ресурсов, используемых листом rgrid.Worksheets(0).Dispose()
//Создание экземпляра виртуальной книги var workbook = ReoGridControl.CreateMemoryWorkbook(); //Сброс книги (удаление всех листов и создание пустого нового) 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(); //Освобождение ресурсов, используемых листом rgrid.Worksheets[0].Dispose();
Основные (простые) действия над ячейками и диапазонами ячеек
'Занесение значения в ячейку 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").Body = Nothing 'Задание имени диапазона Dim myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4) 'Запись данных в диапазон myRange.Data = New Object(,) {{1, 2, 3, 4}, {0.10000000000000001, 0.20000000000000001, 0.29999999999999999, 0.40000000000000002}, {"яблоко", "банан", "апельсин", "груша"}} 'Задание ширины столбца rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100) 'Изменяем ширину заголовка rgrid.CurrentWorksheet.ColumnHeaders(0).Width = 100 'Столбец A rgrid.CurrentWorksheet.ColumnHeaders(1).Width = 500 'Столбец B
//Занесение значения в ячейку 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"].Body = null; //Задание имени диапазона 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.
Чтобы вернуть ячейке первоначальный облик, то есть вернуть возможность вводить данные и править текст, достаточно присвоить свойству body значение null (C#), Nothing (VB)
ReoGrid содержит следующие встроенные типы ячеек:
Название | Вид | Пояснение |
---|---|---|
Кнопка (Button) | ![]() |
Для каждой кнопки можно назначить свой обработчик событий. |
Гиперссылка (Hyperlink) | ![]() |
По щелчку на ссылке в браузере по умолчанию открывается соответствующий сайт. |
Флажок (Check Box) | ![]() |
Аналог флажка (CheckBox). Свойство для добавления поясняющего текста не предусмотрено. |
Радиокнопка (Radio Button) | ![]() |
Аналог радиокнопки. Свойство для добавления поясняющего текста не предусмотрено. |
Раскрывающийся список (Drop-down list) | ![]() |
Аналог классического раскрывающегося списка |
Картинка (Image) | ![]() |
Изображение с настраиваемым расположением. |
Индикатор выполнения (Numeric Progress) | ![]() |
Аналог ProgressBar. Значения: от 0 до 1 |
Кнопка с картинкой (ImageButtonCell) | ![]() |
Кнопка, для которой можно придать вид картинки. |
“Индикатор направления” (NegativeProgressCell) | ![]() |
В первая половина ячейки отвечает за отрицательные значения, вторая – за положительные. Рекомендуемые значения: интервал от -1 до 1 |
Выбор даты (DatePickerCell) | ![]() |
При щелчке на списке появляется встроенный элемент управления Календарь. |
Ниже приведены примеры кода для работы с указанными типами ячеек.
Кнопка (Button)
'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
//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};
Вариант обработчика события
Sub btn_Click(ByVal s As Object, ByVal e As EventArgs) MsgBox("Кнопка нажата") End Sub
var button = new ButtonCell("Привет"); button.Click += (s, e) => MessageBox.Show("Кнопка нажата");
Гиперссылка (Hyperlink)
Гиперссылка использует данные ячейки как адрес URL.
'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 = "https://reogrid.net/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
//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 = "https://reogrid.net/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)
Для этой процедуры рекомендуется использовать таблицу без объединённых ячеек 😉 Сам Флажок занимает одну ячейку, поясняющую надпись к нему нужно располагать с другой ячейке.
Dim middleStyle = New WorksheetRangeStyle 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
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)
Как и флажки, радиокнопки занимают одну ячейку. Назовём ячейку с радиокнопкой радиоячейкой. После добавления радиоячеек в группу, они начинают работать вместе (может быть выбрана только одна радиокнопка)
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) = "Банан"
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:
Dim mydropdown As New DropdownListCell("Яблоко", "Апельсин", "Банан", "Груша", "Тыква", "Вишня", "Кокос") rgrid.CurrentWorksheet(2, 3) = New Object() {"Список:", mydropdown}
DropdownListCell mydropdown = new DropdownListCell( "Яблоко","Апельсин","Банан","Груша","Тыква","Вишня","Кокос" ); rgrid.CurrentWorksheet[2, 3] = new object[] {"Список:", mydropdown};
Картинка (Image)
В ячейку помещается графическое изображение
Свойство ViewMode позволяет управлять отображением картинки в ячейке:
'Загрузка из файла 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)
//Загрузка из файла 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)
Позволяет отобразить результат выполнения какого-либо задания или его этапа.
Dim pc As ProgressCell = New ProgressCell pc.TopColor = Color.Aqua pc.BottomColor = Color.Black rgrid.CurrentWorksheet(7, 2) = 0.80000000000000004 rgrid.CurrentWorksheet(7, 2) = pc
ProgressCell pc = new ProgressCell(); pc.TopColor = Color.Aqua; pc.BottomColor = Color.Black; rgrid.CurrentWorksheet[7, 2] = 0.8; rgrid.CurrentWorksheet[7, 2] = pc;
Кнопка с картинкой (ImageButtonCell)
Dim ibc As ImageButtonCell = New ImageButtonCell ibc.Image = Image.FromFile("D:\myinfo\photo.png") rgrid.CurrentWorksheet(9, 2) = 0.80000000000000004 rgrid.CurrentWorksheet(9, 2) = ibc
ImageButtonCell ibc = new ImageButtonCell(); ibc.Image = Image.FromFile("D:\\myinfo\\photo.png"); rgrid.CurrentWorksheet[9, 2] = 0.8; rgrid.CurrentWorksheet[9, 2] = ibc;
“Индикатор направления” (NegativeProgressCell)
Dim npc As NegativeProgressCell = New NegativeProgressCell npc.NegativeColor = Color.Red npc.LinearGradient = True npc.PositiveColor = Color.Green rgrid.CurrentWorksheet(10, 2) = 0.80000000000000004 rgrid.CurrentWorksheet(10, 2) = npc Dim npc1 As NegativeProgressCell = New NegativeProgressCell npc1.NegativeColor = Color.Red npc1.LinearGradient = True npc1.PositiveColor = Color.Green rgrid.CurrentWorksheet(11, 2) = -0.80000000000000004 rgrid.CurrentWorksheet(11, 2) = npc1
NegativeProgressCell npc = new NegativeProgressCell(); npc.NegativeColor = Color.Red; npc.LinearGradient = true; npc.PositiveColor = Color.Green; rgrid.CurrentWorksheet[10, 2] = 0.8; rgrid.CurrentWorksheet[10, 2] = npc; NegativeProgressCell npc1 = new NegativeProgressCell(); npc1.NegativeColor = Color.Red; npc1.LinearGradient = true; npc1.PositiveColor = Color.Green; rgrid.CurrentWorksheet[11, 2] = -0.8; rgrid.CurrentWorksheet[11, 2] = npc1;
“Выбор даты” (DatePickerCell)
Dim myDatePicker As New DatePickerCell rgrid.CurrentWorksheet(1, 3) = "Выберите дату:" rgrid.CurrentWorksheet(2, 3) = New Object() {myDatePicker} 'или так: rgrid.CurrentWorksheet(3, 3) = New Object() {"Выберите дату:", myDatePicker}
var myDatePicker = new DatePickerCell(); rgrid.CurrentWorksheet[1, 3] = "Выберите дату:"; rgrid.CurrentWorksheet[2, 3] = new Object[] {myDatePicker}; //или так: rgrid.CurrentWorksheet[3, 3] = new Object[] {"Выберите дату:", myDatePicker};
Форматы данных
Для использования форматов данных нужно импортировать пространство имён 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 | Нет |
Настраиваемый (Custom Extension) | CellDataFormatFlag.Custom | Любой объект |
Для числового типа доступно перечисление NumberNegativeStyle: стиль отображения отрицательных значений.
Стиль | Пример | Значение для перечисления |
---|---|---|
Без стиля | -123,456.789 | Minus |
Красный | 123,456,789 | Red |
Красный цвет и минус | -123,456.789 | Red | Minus (VB: Red Or Minus) |
Помещение в скобки | (123,456.789) | Brackets |
Помещение в скобки и красный цвет | (123,456.789) | Brackets | Red (VB: Brackets Or Red) |
Префикс Sankaku | ▲ 123,456,789 | Prefix_Sankaku |
Красный префикс Sankaku | ▲ 123,456,789 | Prefix_Sankaku | Red (VB: Prefix_Sankaku Or Red) |
Пример использования:
'Числовой формат данных (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(RangePosition.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(RangePosition.EntireRange, CellDataFormatFlag.DateTime, FFDT) 'Процентный (Percent) Dim FFPer As New NumberDataFormatter.NumberFormatArgs FFPer.DecimalPlaces = 2 'Количество знаков после запятой или точки rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Percent, FFPer) 'Денежный (Currency) Dim FFCur As New CurrencyDataFormatter.CurrencyFormatArgs FFCur.CultureEnglishName = "ru-RU" 'Культура "ru-RU" FFCur.DecimalPlaces = 1 'Количество знаков после запятой/точки FFCur.PostfixSymbol = "р." 'Символ "р.". Указываем после числа 'FFCur.PrefixSymbol = "р." 'Символ "р.". Указываем перед числом rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Currency, FFCur) 'Текстовый (Text) rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Text, Nothing)
//Числовой формат данных (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(RangePosition.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(RangePosition.EntireRange, CellDataFormatFlag.DateTime, FFDT); //Процентный (Percent) NumberDataFormatter.NumberFormatArgs FFPer = new NumberDataFormatter.NumberFormatArgs(); FFPer.DecimalPlaces = 2; //Количество знаков после запятой или точки rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Percent, FFPer); //Денежный (Currency) CurrencyDataFormatter.CurrencyFormatArgs FFCur = new CurrencyDataFormatter.CurrencyFormatArgs(); FFCur.CultureEnglishName = "ru-RU"; //Культура "ru-RU" FFCur.DecimalPlaces = 1; //Количество знаков после запятой/точки FFCur.PostfixSymbol = "р."; //Символ "р.". Указываем после числа //FFCur.PrefixSymbol = "р."; //Символ "р.". Указываем перед числом rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Currency, FFCur); //Текстовый (Text) rgrid.CurrentWorksheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Text, null);
Управление параметрами книги или листа
Существуют параметры для всей книги и для отдельных её листов. Для управления параметром существует три метода: универсальный (нужно указать параметр типа WorkbookSettings для книги, WorksheetSettings для листа, а также булевое значение: True = включить, False = выключить), включение и выключение. Для последних вариантов в скобках нужно указать включаемый или отключаемый параметр типа WorkbookSettings или WorksheetSettings.
Узнать значение параметра можно с помощью метода HasSetting
Параметры книги (WorkbookSettings) и листа (WorksheetSettings)
Варианты включения и выключения параметров, получение состояния параметра, а также комбинирование параметров. В качестве примера взят параметр WorkbookSettings.View_ShowSheetTabControl
'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) 'Выключение сразу двух параметров
//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);//Выключение сразу двух параметров
Пример настройки книги и листа с пояснениями в комментариях
'Включаем все параметры книги 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_AutoExpandRowHeight, True) 'Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoExpandColumnWidth, 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.View_ShowFrozenLine, True) 'Отображать или скрывать линию фиксации (frozen line). По умолчанию линия отображается (true) 'Подсчёт формул rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, True) 'Разрешить автоматическое обновление ссылок на ячейки в формуле rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, True) 'Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.8.8 зарезервировано)
//Включаем все параметры книги 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_AutoExpandRowHeight, true); //Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoExpandColumnWidth, 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.View_ShowFrozenLine, true); //Отображать или скрывать линию фиксации (frozen line). По умолчанию линия отображается (true) //Подсчёт формул rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, true); //Разрешить автоматическое обновление ссылок на ячейки в формуле rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, true); //Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.8.8 зарезервировано) //rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoRebuild, true); //Разрешить автоматически корректировать или перестраивать формулу (0.8.8 зарезервировано)
Параметр, который позволяет указать: нужно ли добавлять в конец листа немного свободного пространства (отступ от нижнего края листа):
rgrid.ShowScrollEndSpacing = False
rgrid.ShowScrollEndSpacing = false;
Обработка событий
События листа
Событие | Когда возникает |
---|---|
WorksheetCreated | После создания листа |
WorksheetInserted | После вставки листа |
WorksheetRemoved | После удаления листа |
BeforeWorksheetNameChange | Перед переименованием листа |
WorksheetNameChanged | После переименования листа |
События ячеек
Событие | Когда возникает |
---|---|
BeforeCellEdit | Перед любыми изменениями в ячейках в режиме правки |
AfterCellEdit | Когда какие-либо ячейки правятся пользователем |
CellDataChanged | Когда изменяются данные в ячейках |
CellKeyUp | Когда пользователь отпускает любую клавишу при активном листе внутри любой ячейки |
CellMouseEnter | Когда указатель мыши перемещается в ячейку и зависает над ней |
CellMouseLeave | Когда указатель мыши покидает ячейку |
CellMouseDown | Когда происходит нажатие кнопки мыши, а указатель находится в ячейке |
CellMouseUp | Когда происходит отпускание кнопки мыши, а указатель находится в ячейке |
CellMouseMove | Когда указатель мыши движется внутри ячейки |
Принцип действия процедуры правки ячеек
Когда пользователь нажимает клавишу F2 или вводит любые символы (включая введённые инструментом IME), ReoGrid останавливает остальные процессы и переходит в режим правки ячейки (Edit mode), перед отображением на экране поля ввода ReoGrid вызовет возникновение события BeforeCellEdit. Это событие имеет аргумент IsCanncelled, который применяется для отмены правки. Если правка разрешена, то поле ввода будет отображено на экране и получит фокус ввода.
Во время ввода пользователем любого текста в поле ввода, в ReoGrid будут происходить события CellEditTextChanging и CellEditCharInputted, при этом событие CellEditTextChanging будет возникать когда пользователь изменяет текст в поле ввода. При этом нет разницы в том, как вводится текст: путём прямого ввода, методом копирования/вставки или же другими путями. Событие CellEditCharInputted возникает при получении от пользователя символов, включая символы Unicode из инструмента IME. Это событие имеет аргументы позволяют изменять вводимые символы или запретить их получение.
В WPF-издании, событие CellEditCharInputted можно проверять вводимые символы, но не изменять их. Для изменения текста нужно использовать событие CellEditTextChanging.
После того, как пользователь нажал клавишу Enter или убрал фокус ввода из поля ввода, процесс правки прерывается. По окончании правки возникают события AfterCellEdit и CellDataChanged. Обратите внимание на то, что когда пользователь нажмёт клавишу Escape, процесс правки будет отменён самим ReoGrid и введённые пользователем данные будут заменены теми данные, которые были в ячейке до правки, при этом произойдёт событие AfterCellEdit, а CellDataChanged не произойдёт.
AfterCellEdit против CellDataChanged
AfterCellEdit предоставляет шанс прервать или отменить правку после того, как пользователь завершил ввод текста. Возвращение EndReason со значением Cancel из AfterCellEditEventArgs приведёт к тому, что правка будет прервана, а данные в ячейке заменятся теми, которые там были до начала правки. Событие CellDataChanged возникает тогда, когда данные были изменены каким-либо образом, включая метод SetCellData и вставку из Буфера обмена, это последнее событие, наблюдаемое после изменения данных в ячейке, оно не позволяет отменить правку или что-либо изменить.
Подробнее о событии CellKeyUp
Пример использования:
'Добавление обработчика: Dim sheet = rgrid.CurrentWorksheet AddHandler sheet.CellKeyUp, AddressOf sheet_CellKeyUp
//Добавление обработчика: var sheet = rgrid.CurrentWorksheet; sheet.CellKeyUp += sheet_CellKeyUp;
Код обработчика
Sub sheet_CellKeyUp(ByVal Sender As Object, ByVal e As CellKeyDownEventArgs) MessageBox.Show("Нажата клавиша: " & e.KeyCode) End Sub
void sheet_CellKeyUp(object sender, unvell.ReoGrid.Events.CellKeyDownEventArgs e){ MessageBox.Show("Нажата клавиша: " + e.KeyCode); }
Примечание. Это событие может не происходить, если были нажаты клавиши, переводящие лист в режим редактирования (Edit-mode). Обычно к ним относят символьные клавиши A-Z, 0-9 и подобные. Поэтому, если для ячеек разрешено редактирование, то могут произойти лишь события BeforeCellKeyDown и AfterCellKeyDown.
Подробнее о событии CellMouseDown
Событие происходит при нажатии кнопки мыши, когда указатель мыши находится над видимой ячейкой.
Примечание. Значение свойства Cell аргумента события может быть равно null (VB: Nothing). ReoGrid не создаёт никаких экземпляров ячеек, если в ячейку не добавлялись данные или к ней не применялись стили.
Для того, чтобы всегда получать экземпляр ненулевой ячейки, используйте метод листа CreateAndGetCell.
'Добавление обработчика: 'Dim sheet = rgrid.CurrentWorksheet 'AddHandler sheet.CellMouseDown, AddressOf sheet_CellMouseDown 'Код обработчика 'Sub sheet_CellMouseDown(ByVal Sender As Object, ByVal e As CellMouseEventArgs) 'небезопасно: экземпляр ячейки может быть равным Nothing 'Dim cell = e.Cell 'безопасно: если экземпляр ячейки не существует, то он создаётся по информации о позиции 'Dim sheet = rgrid.CurrentWorksheet 'Dim cell = sheet.CreateAndGetCell(e.CellPosition) 'End Sub
//Добавление обработчика: var sheet = rgrid.CurrentWorksheet; //sheet.CellMouseDown += sheet_CellMouseDown; //Код обработчика: //void sheet_CellMouseDown(object sender, CellMouseEventArgs e) { //небезопасно: экземпляр ячейки может быть равным null //var cell = e.Cell; //безопасно: если экземпляр ячейки не существует, то он создаётся по информации о позиции //var sheet = rgrid.CurrentWorksheet; //var cell = sheet.CreateAndGetCell(e.CellPosition); //}
Подробнее о событии AfterCellEdit
Событие возникает после того, как пользователь закончил редактировать содержимое ячейки.
Пример: с помощью обработки события AfterCellEdit изменяем текст в ячейке: из ‘текст’ получаем ‘[текст]’:
'Добавление обработчика: 'AddHandler rgrid.AfterCellEdit, AddressOf rgrid_AfterCellEdit 'Код обработчика: 'Sub rgrid_AfterCellEdit(ByVal Sender As Object, ByVal e As CellAfterEditEventArgs) 'e.NewData = "[" & e.NewData & "]" 'End Sub
//Добавление обработчика: //this.rgrid.AfterCellEdit += rgrid_AfterCellEdit; //Код обработчика: //void rgrid_AfterCellEdit(object sender, CellAfterEditEventArgs e) //{ // e.NewData = "[" + e.NewData + "]"; //}
События строк и столбцов
Событие | Когда возникает |
---|---|
RowInserted | Когда пользователь вставляет строки |
RowDeleted | Когда пользователь удаляет строки |
ColInserted | Когда пользователь вставляет столбцы |
ColDeleted | Когда пользователь вставляет столбцы |
RowsHeightChanged | Когда меняется высота строки |
ColumnsWidthChanged | Когда меняется ширина столбца |
HeightChanged | Когда меняется высота |
WidthChanged | Когда меняется ширина |
RowsFiltered | Когда к строкам применяется фильтр |
RowsSorted | Когда к строкам применяется сортировка |
События диапазонов ячеек
Событие | Когда возникает |
---|---|
RangeMerged | Когда объединяются ячейки диапазона |
RangeUnmerged | Когда отменяется объединение ячеек диапазона |
RangeStyleChanged | Когда происходит установка стиля |
BeforeRangeCopy | Перед копированием выделенного диапазона |
BeforeRangeMove | Перед перемещением выделенного диапазона |
AfterRangeCopy | После копирования диапазона |
AfterRangeMove | После перемещения диапазона |
События границ
Событие | Когда возникает |
---|---|
BorderAdded | Когда добавляются границы |
BorderRemoved | Когда удаляются границы |
События выделенного
Событие | Когда возникает |
---|---|
SelectionRangeChanged | При изменении диапазона выделения |
SelectionRangeChanging | Во время изменения выделения мышью |
SelectionModeChanged | При изменении режима выделения |
SelectionStyleChanged | При изменении стиля выделения |
SelectionForwardDirectionChanged | При изменении направления перемещения фокуса ввода |
SelectionMovedForward | Когда выделение переносится в следующую позицию |
HoverPosChanged | Когда указатель мыши движется над ячейками |
FocusPosChanged | Когда фокус переходит к другой ячейке |
Подробнее о событии SelectionRangeChanged
Событие происходит при смене выделенного диапазона листа. Пример:
'Добавление обработчика: 'Dim sheet = rgrid.CurrentWorksheet 'AddHandler sheet.SelectionRangeChanged, AddressOf sheet_SelectionRangeChanged 'Код обработчика: 'Sub sheet_SelectionRangeChanged(byval sender as object, byval args as RangeEventArgs) 'MessageBox.Show("Выделен другой диапазон: " & args.Range.ToAddress()) 'End Sub
//Добавление обработчика: //var sheet = rgrid.CurrentWorksheet; //sheet.SelectionRangeChanged += sheet_SelectionRangeChanged; //Код обработчика: //void sheet_SelectionRangeChanged(object sender, RangeEventArgs args) //{ // MessageBox.Show("Выделен другой диапазон: " + args.Range.ToAddress()); //}
Примечание. Событие не будет происходить во время перемещения мыши над листом перед выделением листа, происходит только когда кнопка мыши отпущена. Для получения информации об изменении выделенного диапазона во время перемещения мыши, используйте событие SelectionRangeChanging.
События внешних границ (Outline)
Событие | Когда возникает |
---|---|
OutlineAdded | Когда в таблицу добавлена внешняя граница |
OutlineRemoved | Когда внешняя граница удалена из таблицы |
BeforeOutlineCollapse | Когда пользователь щёлкает на кнопке “-” за пределами таблицы – для её сворачивания |
AfterOutlineCollapse | Когда граница замкнулась |
BeforeOutlineExpand | Когда пользователь щёлкает на кнопке “+” за пределами таблицы – для её разворачивания |
AfterOutlineExpand | Когда внешняя граница развёрнута |
События действий (Action)
Событие | Когда возникает |
---|---|
ActionPerformed | При выполнении любых действий |
Undid | Когда действие undid |
Redid | Когда действие redid |
События фиксации (“замораживания”)
Событие | Когда возникает |
---|---|
CellsFrozen | Когда лист был зафиксирован |
CellsUnfrozen | Когда прекращена фиксация листа |
События элемента управления
Событие | Когда возникает |
---|---|
Scaled | Во время масштабирования элемента управления (уменьшение/увеличение масштаба) |
FileLoaded | Когда в элемент управления загрузились данные из файлового потока (load from given stream will not fire this event) |
FileSaved | Когда содержимое элемента управления сохранено в файловом потоке (save into given stream will not fire this event) |
Resetted | Когда состояние элемента управление сбрасывается к значению по умолчанию |
События буфера обмена
Событие | Когда возникает |
---|---|
BeforeCopy | Перед операцией копирования |
AfterCopy | Во время копирования диапазона из буфера обмена (Clipboard) |
BeforePaste | Перед операцией вставки |
AfterPaste | Во время вставки из буфера обмена (Clipboard) |
BeforeCut | Перед операцией вырезания |
AfterCut | Когда пользователь вырезает содержимое диапазона |
OnPasteError | При возникновении ошибок в процессе операции вставки |
Внешний вид компонента и локализация
Смена цветовой палитры
Во ряде случаев оформление компонента по умолчанию может не подходить под оформление основного приложения. Для этого достаточно внести изменения в объект ControlAppearanceStyle. Наиболее удобным вариантом может быть встроенный в ReoGrid Editor редактор стилей, вызываемый из меню Tools (Сервис) -> Control Appearance… (Оформление компонента). Полученный стиль можно экспортировать в набор строк на языках C#, Visual Basic, который необходимо вставить в код разрабатываемого приложения.
'Создание экземпляра стиля элемента управления, содержащего настройки цветов Dim rgcs As ControlAppearanceStyle = New ControlAppearanceStyle(Color.Gray, Color.DarkOrange, False) 'Цвет текста будет серым rgcs(ControlAppearanceColors.GridText) = Color.Gray 'Изменение других переменных... 'Применение обновлённого стиля rgrid.ControlStyle = rgcs
// Создание экземпляра стиля элемента управления, содержащего настройки цветов ControlAppearanceStyle rgcs = new ControlAppearanceStyle(Color.Gray, Color.DarkOrange, false); // Цвет текста будет серым rgcs[ControlAppearanceColors.GridText] = Color.Gray; //Изменение других переменных... // Применение обновлённого стиля rgrid.ControlStyle = rgcs;
Встроенная локализация
ReoGrid может переключать язык интерфейса автоматически – в зависимости от клиентской среды выполнения.
Модуль |
Английский |
Японский | Русский | Китайский |
---|---|---|---|---|
ReoGrid | ![]() |
![]() |
![]() |
![]() |
ReoGridEditor | ![]() |
![]() |
![]() |
|
Demo Project | ![]() |
![]() |
Локализация компонента
Для перевода надписей во встроенных элементах на нужный язык достаточно изменить значения нескольких свойств компонента.
'Локализация 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"
//Локализация 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
Заполняем списки перечнем кеглей (размеров) шрифта, гарнитур (семейств) шрифтов и количества процентов
'Кегли 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%"}) 'Объявление обработчиков событий изменения масштаба 'AddHandler rgrid.CurrentWorksheet.Scaled, AddressOf Sheet_Scaled AddHandler cboZoom.TextChanged, AddressOf cboZoom_TextChanged
//Кегли 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%"}); //Объявление обработчика события изменения масштаба (уберите символы комментирования) //rgrid.CurrentWorksheet.Scaled += Sheet_Scaled; //cboZoom.TextChanged += cboZoom_TextChanged;
Cовместимость с форматом Excel
ReoGrid имеет повышенную совместимость с форматом Excel 2007/2010 (xlsx): возможно как считывание данных, так и их запись. При этом поддерживаются основные стили оформления ячеек, встроенные плавающие изображения и некоторые типы диаграмм. Созданный компонентом файл с расширением xlsx понимается и программой LibreOffice Calc.
ReoGrid представляет собой книгу (Workbook), которая может содержать вложенные листы-таблицы (WorkSheets). Для переключения между листами служит встроенный отключаемый вкладочный элемент (TabControl). Активный лист имеет псевдоним CurrentWorkSheet.
В примерах будут встречаться примеры загрузки и сохранения данных, используя формат Microsoft Excel. Наличие установленной копии офисного пакета от Майкрософт не требуется.
Формула (Formula)
Что следует учитывать при работе с формулами
- Данные в ячейке, начинающиеся с символа “=”, автоматически обрабатываются как формула.
- Значения ячеек с формулами автоматически обновляются при изменении значений в связанных с ними ячейках.
- Данные в ячейке, начинающиеся с символа (‘) не будут восприниматься как формула.
- Язык формул ReoGrid чувствителен к регистру, все функции, совместимыe с Microsoft Excel, должны указываться в ВЕРХНЕМ регистре, например SUM и AVERAGE, вызов функции и использованием имён вида “sum” приведёт к возникновению исключения ‘function not found’ (функция не найдена).
Можно использовать как английскую, так и русскую версии функций: они равнозначны.
Поддерживаемые встроенные функции
Английчкая версия | Русская версия | Назначение функции | |
---|---|---|---|
Статистические функции | |||
SUM | СУММ | Возвращает сумму значений чисел. Пример: SUM(B11:E12), СУММ(B11:E12) | |
AVERAGE | СРЗНАЧ | Возвращает среднее арифметическое значение указанных аргументов | |
COUNT | СЧЁТ | Возвращает количество ячеек, содержащих числа, и подсчитывает числа в списке аргументов | |
COUNTA | СЧЁТЗ | Функция СЧЁТЗ подсчитывает количество заполненных ячеек в диапазоне. | |
MIN | МИН | Возвращает наименьшее значение в списке аргументов | |
MAX | МАКС | Возвращает наибольшее значение в списке аргументов | |
Функции условий | |||
IF | ЕСЛИ | С проверкой на условие | |
AND | И | Логическое И | |
OR | ИЛИ | Логическое ИЛИ | |
NOT | НЕ | Логическое отрицание | |
Адресные функции | |||
ROW | СТРОКА | Возвращает номер строки, определяемой ссылкой. | |
COLUMN | СТОЛБЕЦ | Возвращает номер столбца для указанной ссылка на ячейку. | |
ADDRESS | АДРЕС | Возвращает ссылку на отдельную ячейку листа в виде текста | |
INDIRECT | ДВССЫЛ | Возвращает ссылку, заданную текстовой строкой | |
Математические функции | |||
ABS | ABS | Возвращает абсолютное значение числа | |
ROUND | ОКРУГЛ | Возвращает число, округленное с требуемой точностью. Примеры: ROUND(B8), ROUND(E8, 2) | |
CEILING | ОКРВВЕРХ | Возвращает число, округляемое в сторону увеличения, от нуля до ближайшего кратного указанному значению | |
FLOOR | ОКРВНИЗ | Округление числа до ближайшего меньшего значения | |
SIN | SIN | Возвращает синус числа | |
COS | COS | Возвращает косинус числа | |
TAN | TAN | Возвращает тангенс числа | |
ASIN | ASIN | Возвращает арксинус числа | |
ACOS | ACOS | Возвращает арккосинус числа | |
ATAN | ATAN | Возвращает арктангенс числа | |
ATAN2 | ATAN2 | Возвращает арктангенс для заданных координат x и y | |
POWER | СТЕПЕНЬ | Возвращает результат возведения числа в степень. | |
EXP | EXP | Возвращает число e, возведенное в указанную степень | |
LOG | LOG | Возвращает логарифм числа по заданному основанию. | |
LOG10 | LOG10 | Возвращает десятичный логарифм числа. | |
MOD | ОСТАТ | Возвращает остаток от деления аргумента “число” на значение аргумента “делитель”. Результат имеет тот же знак, что и делитель. | |
Функции для работы с датами | |||
NOW | ТДАТА | Возвращает текущие дату и время в числовом формате | |
TODAY | СЕГОДНЯ | Возвращает текущую дату в числовом формате | |
TIME | ВРЕМЯ | Возвращает заданное время в числовом формате | |
YEAR | ГОД | Преобразует дату в числовом формате в год | |
MONTH | МЕСЯЦ | Преобразует дату в числовом формате в месяцы | |
DAY | ДЕНЬ | Преобразует дату в числовом формате в день месяца | |
HOUR | ЧАС | Преобразует дату в числовом формате в часы | |
MINUTE | МИНУТЫ | Преобразует дату в числовом формате в минуты | |
SECOND | СЕКУНДЫ | Преобразует дату в числовом формате в секунды | |
MILLISECOND | MILLISECOND* | Преобразует дату в числовом формате в миллисекунды | |
DAYS | ДНЕЙ | ? | |
Функции для работы со строками | |||
LEFT | ЛЕВСИМВ | Возвращают крайние слева знаки текстового значения | |
RIGHT | ПРАВСИМВ | Возвращают крайние справа знаки текстовой строки | |
MID | ПСТР | Возвращают заданное число знаков из строки текста, начиная с указанной позиции | |
UPPER | ПРОПИСН | Преобразует все буквы текста в прописные | |
LOWER | СТРОЧН | Преобразует все буквы текста в строчные | |
LEN | ДЛСТР | Возвращает количество символов в текстовой строке | |
FIND | НАЙТИ | Поиск вхождения одного текстового значения в другое (с учетом регистра) | |
TRIM | СЖПРОБЕЛЫ | Удаляет из текста пробелы | |
Системные функции | |||
ISERROR | ЕСЛИОШИБКА | Возвращает указанное значение, если вычисление по формуле вызывает ошибку; в противном случае функция возвращает результат формулы. | |
ISNUMBER | ЕЧИСЛО | Возвращает “True”, если содержимое ячейки-аргумента является числом. |
Дополнительные функции.
Английская версия | Русская версия | Назначение | |
---|---|---|---|
SUMIF | СУММЕСЛИ | Возвращает сумму значений в диапазоне, которые соответствуют указанным критериям | |
AVERAGEIF | СРЗНАЧЕСЛИ | Возвращает среднее арифметическое значение указанных аргументов, которые отвечают единому заданному критерию | |
COUNTIF | СЧЁТЕСЛИ | Возвращает количество ячеек в заданном диапазоне, которые отвечают единому заданному критерию | |
VLOOKUP | ВПР | Позволяет найти одни данные через другие. Например: в таблице-справочнике найти название товара по его номеру. |
* Может быть изменено в будущих версиях
.
Функции для строки формул (заполняем ComboBox с именем cboFunctions)
cboFunctions.Items.Add("SUM()") cboFunctions.Items.Add("СУММ()") cboFunctions.Items.Add("TODAY()") cboFunctions.Items.Add("СЕГОДНЯ()")
cboFunctions.Items.Add("SUM()"); cboFunctions.Items.Add("СУММ()"); cboFunctions.Items.Add("TODAY()"); cboFunctions.Items.Add("СЕГОДНЯ()");
Ссылки на ячейки (References of Cell)
Как и Microsoft Excel, ReoGrid поддерживает ссылки на ячейку и диапазон.
'Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3) rgrid.CurrentWorksheet("H8") = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)" 'Получение списка ссылок из ячейки Dim rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8")
//Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3) rgrid.CurrentWorksheet["H8"] = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)"; //Получение списка ссылок из ячейки var rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8");
Трассировка прецедентов (Trace Precedents)
Для включения трассировки, необходимо установить для параметра ячейки TraceFormulaPrecedent значение True
При изменении формулы трассирующие стрелки исчезнут.
rgrid.CurrentWorksheet("C2") = 10 rgrid.CurrentWorksheet("C3") = 5 Dim cell As Cell = 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
rgrid.CurrentWorksheet["C2"] = 10; rgrid.CurrentWorksheet["C3"] = 5; Cell 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)
Определение именованного диапазона, установка значений именованного диапазона и применение формулы суммирования к именованному диапазону
Dim namedRange As NamedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2") namedRange.Data = New Object() {1, 3, 5, 7} rgrid.CurrentWorksheet("F2") = "=SUM(items)"
NamedRange namedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2"); namedRange.Data = new object[] {1,3,5,7}; rgrid.CurrentWorksheet["F2"] = "=SUM(items)";
Переносим выбранную функцию из списка в текстовое поле формулы. Для этого используем обработчик события SelectedIndexChanged для раскрывающегося списка cboFunctions
txtFormula.Text &= cboFunctions.Text
txtFormula.Text += cboFunctions.Text;
Перенос формулы в выбранную ячейку. Используется обработчик события KeyDown для текстового поля форулы txtFormula
Изменение формулы в текстовом поле (обработка события txtFormula_KeyDown)
Try If e.KeyCode = Keys.Enter Then rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text End If Catch ex As Exception MsgBox(ex.Message) End Try
if (e.KeyCode == Keys.Enter) { rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].Formula = txtFormula.Text; }
Получение текста формулы из выбранной пользователем ячейки. Для этого используется обработчик события FocusPosChanged компонента ReoGrid.
'Получаем значение поля 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
//Получаем значение поля 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 к книге, то из неё удаляются все листы, после чего создаётся один пустой. Если же применить метод к листу – лист просто очистится от данных.
rgrid.Reset() rgrid.CurrentWorksheet.Reset()
rgrid.Reset(); rgrid.CurrentWorksheet.Reset();
Загрузка данных
Загрузка данных выполняется при помощи перегруженной функции Load (для всей книги) или по одному листу с использованием функций LoadCSV, LoadRGF, которые вполне могут исчезнуть в следующих версиях.
Первым её параметром может быть имя файла или файловый поток ввода-вывода
Второй параметр – формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto – автовыбор, _Custom – ещё не реализован)
Третий и необязательный параметр – кодировка символов. Его использование требует импортировать пространство имён System.Text
'Загрузка данных из файла формата 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)
//Загрузка данных из файла формата 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) по умолчанию или же с произвольным заголовком
'Сохранение данных в файл формата 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
//Сохранение данных в файл формата 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
Если размер диапазона печати превышает размер страницы, то он будет разбит автоматически. Ячейки за пределами диапазона печати не будут распечатаны.
Печать линий сетки таблицы
За это отвечает свойство ShowGridLines
Изменение порядка следования страниц
Изменение параметров страницы
Для этого используется свойство 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
Основные действия показаны в следующих блоках кода:
'Авторазбивка на страницы rgrid.CurrentWorksheet.AutoSplitPage() 'Отображение линий разрывов страниц на экране rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks) 'Изменение диапазона печати rgrid.CurrentWorksheet.PrintableRange = New RangePosition(1, 1, 9, 9) 'Изменение порядка следования страниц rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver 'Печать линий сетки таблицы rgrid.CurrentWorksheet.PrintSettings.ShowGridLines = True 'Изменение параметров страницы 'Для этого используется свойство 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)
//Авторазбивка на страницы rgrid.CurrentWorksheet.AutoSplitPage(); //Отображение линий разрывов страниц на экране rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks); //Изменение диапазона печати rgrid.CurrentWorksheet.PrintableRange = new RangePosition(1, 1, 9, 9); //Изменение порядка следования страниц rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver; //Печать линий сетки таблицы rgrid.CurrentWorksheet.PrintSettings.ShowGridLines = true; //Изменение параметров страницы //Для этого используется свойство 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) и предварительный просмотр
Представляют собой сессии для вывода на печать определённых листов или целой книги.
'Вывод на печать содержимого одного листа с настройками по умолчанию 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
//Вывод на печать содержимого одного листа с настройками по умолчанию 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
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
using (PageSetupDialog psd = 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) { rgrid.CurrentWorksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings); } }
Вариант вызова диалога предварительного просмотра
'Создаём документ для печати 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
//Создаём документ для печати 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); }
Вывод содержимого листа на печать с использованием стандартного диалогового окна печати
Dim doc As System.Drawing.Printing.PrintDocument = Nothing Try doc = rgrid.CurrentWorksheet.CreatePrintSession().PrintDocument Catch ex As Exception MessageBox.Show(Me, ex.Message, Me.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 Is Nothing = False Then doc.Dispose()
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();
Сброс разрывов страниц
Try rgrid.CurrentWorksheet.ResetAllPageBreaks() Catch ex As Exception MsgBox(ex.Message) End Try
try { rgrid.CurrentWorksheet.ResetAllPageBreaks(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Раздел “Правка” – функции, обычно доступные в меню “Правка”
Отмена последнего действия, возврат отменённого действия и повтор последнего. Выполняются только если это возможно
If rgrid.CanUndo = True Then rgrid.Undo() If rgrid.CanRedo = True Then rgrid.Redo() rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange)
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
'Вырезать (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()
//Вырезать (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). Определяет направление перехода фокуса после окончания правки ячейки.
'Стиль выделения 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 'Вниз
//Стиль выделения 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, то на данный момент зафиксированные строки или столбцы отсутствуют
Если зафиксированная область больше максимальной области отображения элемента управления, то активная область станет невидимой
'Получаем позицию заморозки/закрепления Dim pos As CellPosition = rgrid.CurrentWorksheet.FreezePos() 'Проверяем - зафиксирован ли данный лист: Dim isFrozen As Boolean = rgrid.CurrentWorksheet.IsFrozen() 'Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации) rgrid.CurrentWorksheet.FreezeToCell(5, 0) 'Обычная фиксация (указана только позиция) rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Left) 'С привязкой по левому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Right) 'С привязкой по правому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Top) 'С привязкой по верхнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Bottom) 'С привязкой по нижнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.LeftTop) 'С привязкой по левому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.LeftBottom) 'С привязкой по левому и нижнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.RightTop) 'С привязкой по правому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.RightBottom) 'С привязкой по правому и нижнему краям 'Отмена фиксации rgrid.CurrentWorksheet.Unfreeze()
//Получаем позицию заморозки/закрепления CellPosition pos = rgrid.CurrentWorksheet.FreezePos; //Проверяем - зафиксирован ли данный лист: bool isFrozen = rgrid.CurrentWorksheet.IsFrozen; //Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации) rgrid.CurrentWorksheet.FreezeToCell(5, 0);//Обычная фиксация (указана только позиция) rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Left);//С привязкой по левому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Right);//С привязкой по правому краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Top);//С привязкой по верхнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.Bottom);//С привязкой по нижнему краю rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.LeftTop);//С привязкой по левому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.LeftBottom);//С привязкой по левому и нижнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.RightTop);//С привязкой по правому и верхнему краям rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezeArea.RightBottom);//С привязкой по правому и нижнему краям //Отмена фиксации rgrid.CurrentWorksheet.Unfreeze();
Изменение размеров таблицы (Resize)
На данный момент лист ReoGrid максимально может содержать 1048576 строк и 32768 столбцов
'Получаем количество строк и столбцов Dim intRows As Integer = rgrid.CurrentWorksheet.RowCount 'Количество строк Dim intCols As Integer = rgrid.CurrentWorksheet.ColumnCount 'Количество столбцов 'Задаём размер таблицы используя указанные выше переменные rgrid.CurrentWorksheet.Resize(intRows, intCols) 'Или максимальное количество ячеек rgrid.CurrentWorksheet.Resize(1048576, 32768)
//Получаем количество строк и столбцов int intRows = rgrid.CurrentWorksheet.RowCount; int intCols = rgrid.CurrentWorksheet.ColumnCount; //Задаём размер таблицы используя указанные выше переменные rgrid.CurrentWorksheet.Resize(intRows, intCols); //Или максимальное количество ячеек rgrid.CurrentWorksheet.Resize(1048576, 32768);
Стили
Понятие “Стиль ячейки” подразумевает набор правил, который можно задать и изменить в процессе работы разрабатываемого приложения (программы). Сюда можно отнести основные параметры шрифтов, цвета текста и фона, выравнивание внутри ячейки. Полный список параметров приведён ниже.
Компоненты стиля
Компонент |
Значение PlainStyleFlag |
Название свойства | Тип свойства |
Цвет фона | BackColor | BackColor | Color или SolidColor |
Шаблон стиля фона | FillPatternStyle | FillPatternStyle | HatchStyles |
Цвет шаблона фона | FillPatternColor | FillPatternColor | Color или SolidColor |
Цвет текста | TextColor | TextColor | Color или SolidColor |
Название шрифта | FontName | FontName | string |
Размер (кегль) шрифта | FontSize | FontSize | float (Single) для Windows Form; double для WPF |
Стиль шрифта: полужирный | FontStyleBold | Bold | bool (Boolean) |
Стиль шрифта: наклонный (курсив) | FontStyleItalic | Italic | bool (Boolean) |
Стиль шрифта: подчёркнутый | FontStyleUnderline | Underline | bool (Boolean) |
Стиль шрифта: зачёркнутый | FontStyleStrikethrough | Strikethrough | bool (Boolean) |
Горизонтальное выравнивание | HorizontalAlign | HAlign | ReoGridHorAlign |
Вертикальное выравнивание | VerticalAlign | VAlign | ReoGridVerAlign |
Абзацный отступ | Indent | Indent | ushort |
Перенос по словам | TextWrap | TextWrapMode | TextWrapMode |
Угол поворота | RotateAngle | RotateAngle | int (Integer). Значения: -90°~90° |
Отступы от краёв ячейки | Padding | Padding | PaddingValue |
Установка стиля
Существует 4 способа установки стиля:
- использование методов листа (SetRangeStyles);
- использование свойств экземпляра ячейки или диапазона;
- использование Действий;
- использование исполняемого сценария (ReoScript).
При использовании методов листа, необходимо:
- создать экземпляр объекта WorksheetRangeStyle;
- указать необходимые флаги PlainStyleFlag;
- указать необходимые значения стиля;
- применить стиль к диапазону ячеек.
Значение свойства Flag задаётся только 1 раз для каждого стиля. Для объединения флагов служит оператор “ИЛИ”, написание которого зависит от конкретного языка программирования.
rgrid.CurrentWorksheet.SetRangeStyles(Диапазон типа RangePosition, Стиль типа RangePositionStyle)
Шрифт
Можно выбрать его название (семейство) и размер (кегль).
Выравнивание
Текст можно выравнивать по горизонтали и вертикали. Задаётся при помощи свойств MyStyleFont.HAlign и MyStyleFont.VAlign.
Если необходимо в одном экземпляре стиля задать как вертикальное, так и горизонтальное выравнивание текста, то будет полезен флаг PlainStyleFlag.AlignAll, аналогичный объединению флагов PlainStyleFlag.HorizontalAlign и PlainStyleFlag.VerticalAlign
Заливка фона
Фон ячейки может быть как залит определённым цветом, так и текстурой (по шаблону). Ниже приведены примеры настройки границ и заливки фона
Пример изменения всех основных параметров стиля, включая: параметры шрифта, выравнивание, цвета текста и фона
'Шаг 1. Создание экземпляра стиля Dim MyStyle As New WorksheetRangeStyle 'Шаг 2. Задание нужных флагов MyStyle.Flag = PlainStyleFlag.FontName Or PlainStyleFlag.FontSize Or PlainStyleFlag.TextColor Or PlainStyleFlag.FontStyleBold Or PlainStyleFlag.FontStyleItalic Or PlainStyleFlag.FontStyleUnderline Or PlainStyleFlag.FontStyleStrikethrough Or PlainStyleFlag.RotateAngle Or PlainStyleFlag.TextWrap Or PlainStyleFlag.HorizontalAlign Or PlainStyleFlag.VerticalAlign Or PlainStyleFlag.BackColor Or PlainStyleFlag.FillPattern 'Шаг 3. Изменение заданных флагами параметров 'Шрифты MyStyle.FontName = cboFontName.Text MyStyle.FontSize = Convert.ToInt16(Val(cboFontSize.Text)) MyStyle.FontSize = MyStyle.FontSize + 1 '+ 1 пт cboFontSize.Text = Convert.ToString(MyStyle.FontSize) MyStyle.RotateAngle = 45 'Поворот текста на 45 градусов 'Изменяем цвет шрифта MyStyle.TextColor = Color.Red 'Красный 'Начертание шрифта MyStyle.Bold = chkFontBold.Checked 'Полужирный MyStyle.Italic = chkFontItalic.Checked 'Курсив (наклонный) MyStyle.Underline = chkFontUnderline.Checked 'Подчёркнутый MyStyle.Strikethrough = chkFontStrike.Checked 'Зачёркнутый 'Перенос текста (по умолчанию - без переноса, - no-wrap) If chkTextWrap.Checked = True Then MyStyle.TextWrapMode = TextWrapMode.WordBreak Else MyStyle.TextWrapMode = TextWrapMode.NoWrap 'Горизонтальное выравнивание MyStyle.HAlign = ReoGridHorAlign.Left 'По левому краю MyStyle.HAlign = ReoGridHorAlign.Center 'По центру MyStyle.HAlign = ReoGridHorAlign.Right 'По правому краю MyStyle.HAlign = ReoGridHorAlign.DistributedIndent 'С распределённым отступом 'Вертикальное выравнивание MyStyle.VAlign = ReoGridVerAlign.Top 'По верхней стороне MyStyle.VAlign = ReoGridVerAlign.Middle 'Посередине MyStyle.VAlign = ReoGridVerAlign.Bottom 'По нижней стороне 'Задание фона ячейки MyStyle.BackColor = Color.Empty 'Очищаем ячейки MyStyle.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow 'Жёлтый цвет 'Фон на основе шаблона MyStyle.FillPatternColor = Color.SkyBlue 'Цвет узора MyStyle.FillPatternStyle = unvell.ReoGrid.Graphics.HatchStyles.DiagonalBrick 'Стиль узора 'Шаг 4. Применение стиля к выбранному диапазону rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle)
//Шаг 1. Создание экземпляра стиля WorksheetRangeStyle MyStyle = new WorksheetRangeStyle(); //Шаг 2. Задание нужных флагов MyStyle.Flag = PlainStyleFlag.FontName | PlainStyleFlag.FontSize | PlainStyleFlag.TextColor | PlainStyleFlag.FontStyleBold | PlainStyleFlag.FontStyleItalic | PlainStyleFlag.FontStyleUnderline | PlainStyleFlag.FontStyleStrikethrough | PlainStyleFlag.RotateAngle | PlainStyleFlag.TextWrap | PlainStyleFlag.HorizontalAlign | PlainStyleFlag.VerticalAlign | PlainStyleFlag.BackColor | PlainStyleFlag.FillPattern; //Шаг 3. Изменение заданных флагами параметров //Шрифты MyStyle.FontName = cboFontName.Text; MyStyle.FontSize = int.Parse(cboFontSize.Text); MyStyle.FontSize = MyStyle.FontSize + 1; //+ 1 пт cboFontSize.Text = Convert.ToString(MyStyle.FontSize); MyStyle.RotateAngle = 45; //Поворот текста на 45 градусов //Изменяем цвет шрифта MyStyle.TextColor = Color.Red; //Красный //Начертание шрифта MyStyle.Bold = chkFontBold.Checked; //Полужирный MyStyle.Italic = chkFontItalic.Checked; //Курсив (наклонный) MyStyle.Underline = chkFontUnderline.Checked; //Подчёркнутый MyStyle.Strikethrough = chkFontStrike.Checked; //Зачёркнутый //Перенос текста (по умолчанию - без переноса, - no-wrap) if (chkTextWrap.Checked == true) { MyStyle.TextWrapMode = TextWrapMode.WordBreak;} else { MyStyle.TextWrapMode = TextWrapMode.NoWrap; }; //Горизонтальное выравнивание MyStyle.HAlign = ReoGridHorAlign.Left; //По левому краю MyStyle.HAlign = ReoGridHorAlign.Center; //По центру MyStyle.HAlign = ReoGridHorAlign.Right; //По правому краю MyStyle.HAlign = ReoGridHorAlign.DistributedIndent; //С распределённым отступом //Вертикальное выравнивание MyStyle.VAlign = ReoGridVerAlign.Top; //По верхней стороне MyStyle.VAlign = ReoGridVerAlign.Middle; //Посередине MyStyle.VAlign = ReoGridVerAlign.Bottom; //По нижней стороне //Задание фона ячейки MyStyle.BackColor = Color.Empty; //Очищаем ячейки MyStyle.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow; //Жёлтый цвет //Фон на основе шаблона MyStyle.FillPatternColor = Color.SkyBlue; //Цвет узора MyStyle.FillPatternStyle = unvell.ReoGrid.Graphics.HatchStyles.DiagonalBrick; //Стиль узора //Шаг 4. Применение стиля к выбранному диапазону rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle);
Примечания
- Помимо основных флагов, существуют и дополнительные, необходимые для уменьшения количества задаваемых флагов:
- All (все стили).
- AlignAll (горизонтальное и вертикальное выравнивание).
- BackAll (цвет и шаблон фона).
- FontAll (имя, размер и стиль-начертание).
- FontStyleAll (все стили-начертания шрифта).
- LayoutAll (перенос по словам, отступы, поворот текста).
- LineAll (цвет, стиль, толщина, наконечники). Пока не задействовано.
- Код подразумевает использование раскрывающихся списков cboFontName (имя шрифта), cboFontSize (размер шрифта), а также компоненты с двумя возможными состояниями (под chk понимается CheckBox). Для этого подходят и кнопки стандартного компонента Панелей инструментов.
Поворот текста в ячейке
Для поворота текста в ячейках служит свойство RotateAngle. Оно может принимать значения от -90 до 90. Обычное направление соответствует значению 0.
Если необходимо отобразить многострочный текст, то для этого следует установить для свойства TextWrap объекта стиля значение WordBreak.
Выравнивание текста задаётся всё теми же способами, что и для обычного текста.
Совместимость с Excel: настройки направления текста автоматически загружаются из файла Excel и выгружаются в него.
'Однострочный текст rgrid.CurrentWorksheet.Cells("A1").Data = "Привет, мир! (90)" rgrid.CurrentWorksheet.Cells("A1").Style.RotateAngle = 90 rgrid.CurrentWorksheet.Cells("B1").Data = "Привет, мир! (0)" rgrid.CurrentWorksheet.Cells("B1").Style.RotateAngle = 0 rgrid.CurrentWorksheet.Cells("C1").Data = "Привет, мир! (-90)" rgrid.CurrentWorksheet.Cells("C1").Style.RotateAngle = -90 rgrid.CurrentWorksheet.Cells("D1").Data = "Привет, мир! (45)" rgrid.CurrentWorksheet.Cells("D1").Style.RotateAngle = 45 'Многострочный текст rgrid.CurrentWorksheet.Cells("A2").Data = "Табличный компонент" & vbNewLine & "для .Net" rgrid.CurrentWorksheet.Cells("A2").Style.TextWrap = TextWrapMode.WordBreak rgrid.CurrentWorksheet.Cells("A2").Style.RotateAngle = -45 'Выравнивание rgrid.CurrentWorksheet.Cells("A3").Data = "Привет, мир!" rgrid.CurrentWorksheet.Cells("A3").Style.HAlign = ReoGridHorAlign.Left rgrid.CurrentWorksheet.Cells("A3").Style.RotateAngle = 90 rgrid.CurrentWorksheet.Cells("B3").Data = "Привет, мир!" rgrid.CurrentWorksheet.Cells("B3").Style.HAlign = ReoGridHorAlign.Center rgrid.CurrentWorksheet.Cells("B3").Style.RotateAngle = 90 rgrid.CurrentWorksheet.Cells("C3").Data = "Привет, мир!" rgrid.CurrentWorksheet.Cells("C3").Style.HAlign = ReoGridHorAlign.Right rgrid.CurrentWorksheet.Cells("C3").Style.RotateAngle = 90
rgrid.CurrentWorksheet.Cells["A1"].Data = "Привет, мир! (90)"; rgrid.CurrentWorksheet.Cells["A1"].Style.RotateAngle = 90; rgrid.CurrentWorksheet.Cells["B1"].Data = "Привет, мир! (0)"; rgrid.CurrentWorksheet.Cells["B1"].Style.RotateAngle = 0; rgrid.CurrentWorksheet.Cells["C1"].Data = "Привет, мир! (-90)"; rgrid.CurrentWorksheet.Cells["C1"].Style.RotateAngle = -90; rgrid.CurrentWorksheet.Cells["D1"].Data = "Привет, мир! (45)"; rgrid.CurrentWorksheet.Cells["D1"].Style.RotateAngle = 45; //Многострочный текст rgrid.CurrentWorksheet.Cells["A2"].Data = "Табличный компонент\nдля .Net"; rgrid.CurrentWorksheet.Cells["A2"].Style.TextWrap = TextWrapMode.WordBreak; rgrid.CurrentWorksheet.Cells["A2"].Style.RotateAngle = -45; //Выравнивание rgrid.CurrentWorksheet.Cells["A3"].Data = "Привет, мир!"; rgrid.CurrentWorksheet.Cells["A3"].Style.HAlign = ReoGridHorAlign.Left; rgrid.CurrentWorksheet.Cells["A3"].Style.RotateAngle = 90; rgrid.CurrentWorksheet.Cells["B3"].Data = "Привет, мир!"; rgrid.CurrentWorksheet.Cells["B3"].Style.HAlign = ReoGridHorAlign.Center; rgrid.CurrentWorksheet.Cells["B3"].Style.RotateAngle = 90; rgrid.CurrentWorksheet.Cells["C3"].Data = "Привет, мир!"; rgrid.CurrentWorksheet.Cells["C3"].Style.HAlign = ReoGridHorAlign.Right; rgrid.CurrentWorksheet.Cells["C3"].Style.RotateAngle = 90;
Результат выполнения кода
Отображение созданного в ReoGrid файла (первые строки из кода примера). Выравнивание текста не задавалось
Изменение стиля отдельной ячейки
Для изменения стиля отдельной ячейки можно использовать её свойство Style.
rgrid.CurrentWorksheet.Cells("E5").Style.BackColor = Color.LightYellow 'Цвет фона rgrid.CurrentWorksheet.Cells("E5").Style.Bold = True 'Полужирный rgrid.CurrentWorksheet.Cells("E5").Style.Italic = True 'Наклонный rgrid.CurrentWorksheet.Cells("E5").Style.Underline = True 'Подчёркнутый rgrid.CurrentWorksheet.Cells("E5").Style.Strikethrough = True 'Зачёркнутый rgrid.CurrentWorksheet.Cells("E5").Style.FontName = "Verdana" 'Гарнитура rgrid.CurrentWorksheet.Cells("E5").Style.FontSize = 12 'Кегль rgrid.CurrentWorksheet.Cells("E5").Style.HAlign = ReoGridHorAlign.Center 'Горизонтальное выравнивание rgrid.CurrentWorksheet.Cells("E5").Style.VAlign = ReoGridVerAlign.Middle 'Вертикальное выравнивание rgrid.CurrentWorksheet.Cells("E5").Style.Indent = 15 'Отступ текста rgrid.CurrentWorksheet.Cells("E5").Style.Padding = New PaddingValue(5, 5, 5, 5) 'Отступы в ячейке rgrid.CurrentWorksheet.Cells("E5").Style.Padding = New PaddingValue(5) 'Отступы в ячейке rgrid.CurrentWorksheet.Cells("E5").Style.RotateAngle = 90 'Поворот текста (в Pro-издании) rgrid.CurrentWorksheet.Cells("E5").Style.TextColor = Color.Blue 'Цвет текста rgrid.CurrentWorksheet.Cells("E5").Style.TextWrap = TextWrapMode.WordBreak 'Перенос по словам
//Основные настройки стиля для отдельно взятой ячейки. Для большего числа ячеек нужно использовать стили rgrid.CurrentWorksheet.Cells["E5"].Style.BackColor = Color.LightYellow; //Цвет фона rgrid.CurrentWorksheet.Cells["E5"].Style.Bold = true; //Полужирный rgrid.CurrentWorksheet.Cells["E5"].Style.Italic = true; //Наклонный rgrid.CurrentWorksheet.Cells["E5"].Style.Underline = true; //Подчёркнутый rgrid.CurrentWorksheet.Cells["E5"].Style.Strikethrough = true; //Зачёркнутый rgrid.CurrentWorksheet.Cells["E5"].Style.FontName = "Verdana"; //Гарнитура rgrid.CurrentWorksheet.Cells["E5"].Style.FontSize = 12; //Кегль rgrid.CurrentWorksheet.Cells["E5"].Style.HAlign = ReoGridHorAlign.Center; //Горизонтальное выравнивание rgrid.CurrentWorksheet.Cells["E5"].Style.VAlign = ReoGridVerAlign.Middle; //Вертикальное выравнивание rgrid.CurrentWorksheet.Cells["E5"].Style.Indent = 15; //Отступ текста rgrid.CurrentWorksheet.Cells["E5"].Style.Padding = new PaddingValue(5, 5, 5, 5); //Отступы в ячейке rgrid.CurrentWorksheet.Cells["E5"].Style.Padding = new PaddingValue(5); //Отступы в ячейке rgrid.CurrentWorksheet.Cells["E5"].Style.RotateAngle = 90; //Поворот текста (в Pro-издании) rgrid.CurrentWorksheet.Cells["E5"].Style.TextColor = Color.Blue; //Цвет текста rgrid.CurrentWorksheet.Cells["E5"].Style.TextWrap = TextWrapMode.WordBreak; //Перенос по словам
Использование Действий (DoAction)
Пример использования этого механизма:
rgrid.CurrentWorksheet.DoAction(new RGSetRangeStyleAction(Диапазон типа RangePosition, Стиль типа WorksheetRangeStyle))
Использование сценариев
Так же может быть использована команда на сценарном языке ReoScript.
rgrid.CurrentWorksheet.getCell(0, 0).style.backgroundColor = 'red'
Получение значений стилей
Получаем стили диапазона или ячейки:
rgrid.CurrentWorksheet.GetRangeStyles(Диапазон типа RangePosition) rgrid.CurrentWorksheet.GetCellStyles(Позиция_ячейки типа CellPosition)
Приведённый ниже код необходим для настройки пользовательского интерфейса при выборе пользователем другой ячейки или диапазона. Данный код работает в обработчике события SelectionRangeChanged компонента ReoGrid
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 'Зачёркнутый 'Выравнивание по левому краю 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 'Перенос по словам 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 'Другие свойства: 'grpBackgroundColor.BackColor = MyStyle.BackColor 'Цвет фона 'MyStyle.CopyFrom() 'Копировать из другого стиля 'MyStyle.FillPatternColor 'Цвет шаблона фона (узора) 'MyStyle.FillPatternStyle 'Шаблон (узор) 'MyStyle.HAlign.General 'MyStyle.Padding 'Отступы 'grpTextColor.BackColor = MyStyle.TextColor 'Цвет текста
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; //Зачёркнутый //Выравнивание по левому краю 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;} //Перенос по словам 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;} //Другие свойства: //grpBackgroundColor.BackColor = MyStyle.BackColor; //Цвет фона //MyStyle.CopyFrom(); //Копировать из другого стиля //MyStyle.FillPatternColor; //Цвет шаблона фона (узора) //MyStyle.FillPatternStyle; //Шаблон (узор) //MyStyle.HAlign.General //MyStyle.Padding; //Отступы //grpTextColor.BackColor = MyStyle.TextColor; //Цвет текста
Удаление стиля
Для удаления стилей используется свойство листа RemoveRangeStyles.
Флаг PlainStyleFlag позволяет указать, какие стили должны быть удалены. В примере показано удаление стиля фона для выбранного диапазона ячеек с помощью метода и действия.
'Удаляем стиль для выделенного диапазона, даже если он состоит из одной ячейки. rgrid.CurrentWorksheet.RemoveRangeStyles(rgrid.CurrentWorksheet.SelectionRange, PlainStyleFlag.BackAll) 'Метод 'Убираем фоновый цвет для выбранного диапазона: rgrid.DoAction(New RemoveRangeStyleAction(rgrid.CurrentWorksheet.SelectionRange, PlainStyleFlag.BackAll)) 'Действие
//Удаляем стиль для выделенного диапазона, даже если он состоит из одной ячейки. rgrid.CurrentWorksheet.RemoveRangeStyles(rgrid.CurrentWorksheet.SelectionRange, PlainStyleFlag.BackAll); //Метод //Убираем фоновый цвет для выбранного диапазона: rgrid.DoAction(new RemoveRangeStyleAction(rgrid.CurrentWorksheet.SelectionRange, PlainStyleFlag.BackAll)); //Действие
Границы (Borders)
Для настройки границ применяются стили, которые создаются аналогично стилям текста, но задавать флаги не нужно. Что необходимо сделать:
- Создать экземпляр стиля
- Указать тип линий
- Указать цвет линий
- Применить стиль к указанному диапазону ячеек, дополнительно задав затрагиваемые границы.
Тип линии задаётся перечислением BorderLineStyle и может принимать значения, показанные в приведённом ниже примере.
Цвет линии задаётся перечислением Color или другим предусмотренным в .Net способом.
Тип границы задаётся перечислением BorderPositions и может принимать значения, показанные в приведённом ниже примере.
В примере показаны все основные варианты типов линий, вариантов задания цвета и затрагиваемых границ.
'Объявление экземпляра стиля диапазона ячеек 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) 'Все диагональные
//Объявление экземпляра стиля диапазона ячеек 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); //Все диагональные
Очистка границ (Clear)
Для очистки границ достаточно задать для них пустой цвет (Color.Empty) или применить функцию
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)
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);
Объединение, разбивка и группировка ячеек
ReoGrid позволяет объединять и снова разделять ячейки. При этом объединять пересекающиеся диапазоны запрещено: ячейки из одного объединения не должны принадлежать другому. Также предусмотрены возможности проверки текущего состояния произвольной ячейки.
Объединение ячеек
1. Объединяем ячейки, начиная с (2,1). Количество строк – 3, количество столбцов – 4
2. Диапазон объединения начинается в (0,0), содержит 4 строки и 6 столбцов
'1 rgrid.CurrentWorksheet.MergeRange(New RangePosition(2, 1, 3, 4)) '2 'rgrid.CurrentWorksheet.DoAction(New MergeRangeAction(New RangePosition(0, 0, 4, 6)))
//1 rgrid.CurrentWorksheet.MergeRange(new RangePosition(2, 1, 3, 4)); //2 //rgrid.CurrentWorksheet.DoAction(new MergeRangeAction(new RangePosition(0, 0, 4, 6)))
Исключение RangeIntersectionException
Если попытаться объединить 2 и более ячеек, каждая из которых уже входит в состав своего объединения, то возникнет исключение RangeIntersectionException.
Пользовательский код позволяет отловить это исключение и прервать текущую операцию.
Метод CheckIntersectedMergingRange применяется для проверки принадлежности любой ячейки определённому диапазону. Этот метод помогает избегать указанное выше исключение.
Dim outputRange As RangePosition = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(rgrid.CurrentWorksheet.SelectionRange)
RangePosition outputRange = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(rgrid.CurrentWorksheet.SelectionRange);
Если выражение outputRange.IsEmpty является истинным, то диапазон inputRange безопасен. Существует ещё один метод, делающий то же самое.
Dim rs As Boolean = rgrid.CurrentWorksheet.HasIntersectedMergingRange(rgrid.CurrentWorksheet.SelectionRange) MsgBox("Слияние ячеек")
bool rs = rgrid.CurrentWorksheet.HasIntersectedMergingRange(rgrid.CurrentWorksheet.SelectionRange); MessageBox.Show("Слияние ячеек");
Нельзя объединять ячейки из разных объединённых диапазонов – это вызовет ошибку.
rgrid.CurrentWorksheet.Reset() Try 'Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения rgrid.CurrentWorksheet.MergeRange(New RangePosition(2, 2, 5, 5)) rgrid.CurrentWorksheet.MergeRange(New RangePosition(3, 3, 5, 5)) Catch 'unvell.reogrid.RangeIntersectionException MessageBox.Show("Обнаружено исключение RangeIntersectionException! Невозможно изменить часть диапазона ячеек.") End Try
rgrid.CurrentWorksheet.Reset(); try { //Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения rgrid.CurrentWorksheet.MergeRange(new RangePosition(2, 2, 5, 5)); rgrid.CurrentWorksheet.MergeRange(new RangePosition(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).
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 Cell = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input) 'Dim outputRange As RangePosition = rgrid.CurrentWorksheet.CheckMergedRange(inputRange) rgrid.CurrentWorksheet.IsValidCell(2, 2) ' true rgrid.CurrentWorksheet.IsValidCell(2, 3) ' false
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(); //Cell output = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input()); //RangePosition outputRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange); rgrid.CurrentWorksheet.IsValidCell(2, 2); //true rgrid.CurrentWorksheet.IsValidCell(2, 3); //false
Проверка количества выбранных ячеек
Так как ReoGrid обычно работает с выделенными диапазонами ячеек, то нужно предусматривать проверку: выбрана одна ячейка или более одной.
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
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("Невозможно объединить пересекающиеся диапазоны."); } }
Разбивка (разделение) ячеек
Разделение объединённых ячеек.
rgrid.CurrentWorksheet.UnmergeRange(New RangePosition(0, 0, 10, 10)) 'Указанный диапазон rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange) 'Выделенный диапазон
rgrid.CurrentWorksheet.UnmergeRange(new RangePosition(0, 0, 10, 10)); //Указанный диапазон rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange);//Выделенный диапазон
Примечание. Метод UnmergeRange находит и разбивает все объединённые ячейки указанного диапазона.
Группировка (тип данных – Integer)
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
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
Масштабирование (Zoom in/out)
Масштабирование может производиться как с помощью вращения колёсика мыши при зажатой клавише CTRL, так и программно
Ниже показаны примеры работы с масштабированием:
- Выбор значения масштаба из списка (событие TextChanged для раскрывающегося списка cboZoom, содержащего пункты вроде “10 %”).
- Увеличение масштаба на 10%.
- Уменьшение масштаба на 10%.
- Сброс масштаба к значению 100%.
- Установка единицы масштаба.
Для получения сведений о текущем масштабе, который установился, например, с помощью комбинации клавиш, служит событие Scaled
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) 'Обработка события 'Sub Sheet_Scaled(ByVal sender As Object, ByVal e As EventArgs) Dim sheet As Worksheet = DirectCast(sender, Worksheet) cboZoom.Text = Math.Round(sheet.ScaleFactor * 100).ToString & "%" 'End Sub
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); //Обработка события (раскомментируйте код) //public void Sheet_Scaled(object sender, EventArgs e) //{ //Worksheet sheet = (Worksheet)sender; //cboZoom.Text = Convert.ToString(Math.Round(sheet.ScaleFactor * 100)) + "%"; //}
Диаграммы (Charts)
Могут быть созданы в ReoGrid или быть загружены из файла в формате xlsx
Доступны несколько видов диаграмм. Их внешний вид и примеры кода приведены ниже.
За отображение легенды отвечает свойство ShowLegend. В коде примеров оно имеет значение C#: true, VB: True.
Линейная диаграмма (Line Chart, график)
Выполняем несколько действий:
- создаём источник данных (если он не существует), определяем расположение данных;
- создаём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка;
- указываем источники данных, добавляем экземпляр диаграммы на лист.
'Подготовка источника данных. 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.RangePosition = worksheet.Ranges("B3:F5") Dim serialNamesRange As unvell.ReoGrid.RangePosition = worksheet.Ranges("A3:A6") Dim categoryNamesRange As unvell.ReoGrid.RangePosition = 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 = "Пример линейной диаграммы" lineChart.ShowLegend = True '2 lineChart.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, serialNamesRange, dataRange) 'lineChart.DataSource.RowTitleRange = serialNamesRange lineChart.DataSource.CategoryNameRange = categoryNamesRange worksheet.FloatingObjects.Add(lineChart)
//Подготовка источника данных. 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 = "Пример линейной диаграммы"; lineChart.ShowLegend = true; //2 lineChart.DataSource = new WorksheetChartDataSource(worksheet, serialNamesRange, dataRange); //lineChart.DataSource.RowTitleRange = serialNamesRange; lineChart.DataSource.CategoryNameRange = categoryNamesRange; worksheet.FloatingObjects.Add(lineChart);
Вертикальная гистограмма (Column Chart)
Выполняем несколько действий:
- Размещаем данные в таблице.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'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 categoryNameRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(rowTitleRange) worksheet.AddHighlightRange(categoryNameRange) 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 = "Пример гистограммы" c1.ShowLegend = True '4 c1.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange) 'c1.DataSource.RowTitleRange = rowTitleRange 'c1.DataSource.categoryNameRange = categoryNameRange c1.DataSource.CategoryNameRange = categoryNameRange worksheet.FloatingObjects.Add(c1)
//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 categoryNameRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(rowTitleRange); worksheet.AddHighlightRange(categoryNameRange); 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 = "Пример гистограммы"; c1.ShowLegend = true; //4 c1.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange); //c1.DataSource.RowTitleRange = rowTitleRange; c1.DataSource.CategoryNameRange = categoryNameRange; worksheet.FloatingObjects.Add(c1);
Горизонтальная гистограмма (Bar Chart)
Выполняем несколько действий:
- Подготовка источника данных.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'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 categoryNameRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(rowTitleRange) worksheet.AddHighlightRange(categoryNameRange) 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 = "Пример горизонтальной гистограммы" cbar.ShowLegend = True '4 cbar.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange) cbar.DataSource.CategoryNameRange = categoryNameRange worksheet.FloatingObjects.Add(cbar)
//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 categoryNameRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(rowTitleRange); worksheet.AddHighlightRange(categoryNameRange); 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 = "Пример горизонтальной гистограммы"; cbar.ShowLegend = true; //4 cbar.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange); //cbar.DataSource.RowTitleRange = rowTitleRange; cbar.DataSource.CategoryNameRange = categoryNameRange; worksheet.FloatingObjects.Add(cbar);
Круговая 2D диаграмма (Pie 2D Chart)
Выполняем несколько действий:
- Создаём лист и добавляем данные.
- Определяем два диапазона: источник данных и заголовки, добавляем эти диапазоны в коллекцию
- Создаём экземпляр диаграммы, задаём заголовок, источники данных. После этого добавляем её в коллекцию диаграмм.
'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 cpie.ShowLegend = True worksheet.FloatingObjects.Add(cpie)
//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; cpie.ShowLegend = true; worksheet.FloatingObjects.Add(cpie);
Диаграмма с областями (Area Chart)
Выполняем несколько действий:
- Подготовка источника данных.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'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 serialNamesRange = worksheet.Ranges("A3:A5") Dim categoryNamesRange = worksheet.Ranges("B2:F2") worksheet.AddHighlightRange(categoryNamesRange) worksheet.AddHighlightRange(serialNamesRange) worksheet.AddHighlightRange(dataRange) '3 Dim cArea As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.AreaChart cArea.Location = New Graphics.Point(10, 140) cArea.Size = New Graphics.Size(400, 320) cArea.Title = "Пример диаграммы с областями" cArea.ShowLegend = True '4 cArea.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, serialNamesRange, dataRange) cArea.DataSource.CategoryNameRange = categoryNamesRange 'Изменяем стиль - все цвета становятся полупрозрачными For i As Integer = 0 To cArea.DataSerialStyles.Count - 1 Dim color As Color = cArea.DataSerialStyles(i).LineColor cArea.DataSerialStyles(i).LineColor = New Graphics.SolidColor(125, color) Next worksheet.FloatingObjects.Add(cArea)
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 serialNamesRange = worksheet.Ranges["A3:A5"]; var categoryNamesRange = worksheet.Ranges["B2:F2"]; worksheet.AddHighlightRange(categoryNamesRange); worksheet.AddHighlightRange(serialNamesRange); worksheet.AddHighlightRange(dataRange); //3 unvell.ReoGrid.Chart.Chart carea = new unvell.ReoGrid.Chart.AreaChart(); carea.Location = new unvell.ReoGrid.Graphics.Point(10, 140); carea.Size = new unvell.ReoGrid.Graphics.Size(400, 320); carea.Title = "Пример диаграммы с областями"; carea.ShowLegend = true; //4 carea.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, serialNamesRange, dataRange); carea.DataSource.CategoryNameRange = categoryNamesRange; //Изменяем стиль - все цвета становятся полупрозрачными foreach (var style in carea.DataSerialStyles) { style.FillColor = new unvell.ReoGrid.Graphics.SolidColor(100, style.FillColor.ToSolidColor()); } worksheet.FloatingObjects.Add(carea);
Кольцевая диаграмма (Doughnut Chart)
Выполняем несколько действий:
- Подготовка источника данных.
- Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
- Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
- Указываем источники данных, добавляем экземпляр диаграммы на лист.
'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 chartD As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.DoughnutChart chartD.Location = New Graphics.Point(10, 140) chartD.Size = New Graphics.Size(400, 320) chartD.Title = "Пример кольцевой диаграммы" chartD.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange, RowOrColumn.Column) chartD.ShowLegend = True worksheet.FloatingObjects.Add(chartD)
//1 unvell.ReoGrid.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.Chart chartD = new unvell.ReoGrid.Chart.DoughnutChart(); chartD.Location = new unvell.ReoGrid.Graphics.Point(10, 140); chartD.Size = new unvell.ReoGrid.Graphics.Size(400, 320); chartD.Title = "Пример кольцевой диаграммы"; chartD.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange, RowOrColumn.Column); chartD.ShowLegend = true; worksheet.FloatingObjects.Add(chartD);
Плавающие объекты
ReoGrid поддерживает рисуемые объекты, создание на листе диаграмм, плавающих изображений и отображения графических примитивов: прямоугольников, линий, прямоугольников со скруглёнными углами. Также поддерживается считывание плавающих объектов из файла Excel; используя этот функционал, .Net-приложениях можно отображать основанные на Excel отчёты с рисунками и диаграммами.
Плавающие объекты вынесены в новое свойство листа, через которое возможен полный доступ к ним: worksheet.FloatingObjects()
Поддержка Excel
Плавающие объекты будут автоматически загружаться из файла Excel и сохраняться в нём.
Создание плавающих объектов
Пример 1. Создание объекта-прямоугольника. Выполняются следующие действия:
- Создание экземпляра прямоугольника, задание его расположения и размеров.
- Добавление плавающего объекта на лист. Для этого нужно добавить его в коллекцию плавающих объектов. В данном случае получаем текущий лист и пополняем его коллекцию.
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)
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. Добавление плавающего изображения
- Получаем текущий лист.
- Создаём изображение из файла.
- Добавляем изображение на лист с указанием расположения.
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)
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);
Результат:
Получение всех плавающих изображений, встроенных в файл Excel
Для этого необходимо загрузить в экземпляр ReoGrid книгу Excel, выбрать лист и перебрать все изображения с помощью цикла C#: foreach, VB: For Each
rgrid.Load(Application.StartupPath & "\docs\welcome-089.xlsx") Dim wsimgs As Worksheet = rgrid.Worksheets(0) For Each floatingObject As unvell.ReoGrid.Drawing.DrawingObject In wsimgs.FloatingObjects 'Проверка: является ли плавающий объект изображением If TypeOf floatingObject Is Drawing.ImageObject Then Dim imageObject = DirectCast(floatingObject, Drawing.ImageObject) Dim image = imageObject.Image 'Обработка изображения End If Next
rgrid.Load(Application.StartupPath + "\\docs\\welcome-089.xlsx"); var wsimgs = rgrid.Worksheets[0]; foreach (unvell.ReoGrid.Drawing.DrawingObject floatingObject in wsimgs.FloatingObjects) { //Проверка: является ли плавающий объект изображением if (floatingObject is unvell.ReoGrid.Drawing.ImageObject) { var imageObject = (unvell.ReoGrid.Drawing.ImageObject)floatingObject; var image = imageObject.Image; // обработка изображения } }
Отображение текста в формате RTF (Rich format text)
Данный формат представлен в виде класса unvell.ReoGrid.Drawing.RichText()
Экземпляр этого класса представляет собой объект, который можно отобразить внутри ячейки или в рисуемых объектов.
Управление отображением текста
Для задания одних параметров используются настройки стиля отображения ячейки, для других – методы класса RichText, которые указываются при добавлении текста.
Настройки стиля ячеек
- Переносы текста (Line breaks). Используется атрибут стиля wordbreak или breakall.
- Выравнивание текста по горизонтали и вертикали. Соответственно используются атрибуты HAlign и VAlign
Методы RichText
- Span – добавляет текст без каких-либо стилевых особенностей.
- Bold – текст, отображаемый полужирным шрифтом.
- Italic – наклонный.
- Underline – подчёркнутый.
- Strikeout –
зачёркнутый. - Regular – простой текст. Применяется для восстановления исходного вида текста (без эффектов).
- NewLine – добавление нового абзаца.
- SetStyles – изменяет стиль абзаца или Span. Например, можно изменить отступы и высоту строки.
- Superscript – для добавления надстрочного (вот такого) текста.
Примечания:
- Excel не поддерживает изменение стилей отступов и высоты строки для абзацев.
- Excel не поддерживает отдельный стиль выравнивания текста для каждого абзаца (строки текста).
- После использования метода Superscript, для восстановления стиля текста, используйте метод Regular.
Отображение форматированного текста в рисуемых объектах
Для отображения форматированного текста в рисуемых объектах, нужно создать экземпляр класса RichText, добавить в него текст и поместить в рисуемые объекты.
Пример использования:
'Получаем экземпляр листа и объединяем ячейки, для удобства Dim sheet = rgrid.CurrentWorksheet sheet.MergeRange("B2:F6") 'Добавляем первый фрагмент текста sheet("B2") = New unvell.ReoGrid.Drawing.RichText().Regular("Тот самый ").Bold("Rich Text Format").Regular(" (часто сокращаемый до ").Bold("RTF").Regular(") является проприетарным").Superscript("[6][7][8]").Regular(" форматом файла документа с опубликованной спецификацией, разрабатываемой корпорацией Microsoft с ").Span("1987", textColor:=Color.OrangeRed).Span(" по ", textColor:=Color.Black).Span("2008", textColor:=Color.OrangeRed).Span(" годы для кросс-платформенного документооборота с продуктами Microsoft.", textColor:=Color.Black) 'Вот так включаем переносы sheet.Cells("B2").Style.TextWrap = TextWrapMode.WordBreak 'А вот так задаём выравнивание sheet.Cells("B2").Style.VAlign = ReoGridVerAlign.Middle sheet.Cells("B2").Style.HAlign = ReoGridHorAlign.Right 'Добавление абзаца с дополнительными параметрами sheet.MergeRange("B7:F12") sheet("B7") = New unvell.ReoGrid.Drawing.RichText().Span("Тот самый ").Bold("Apple II").Regular(" (обозначаемый как apple ][) является 8-битным домашним компьютером.").NewLine().Span("Один из первых успешних массовых микрокомпьютеров,").Superscript("[2]").Regular(" изначально разработан Стивом Возняком.").NewLine().SetStyles(halign:=ReoGridHorAlign.Right).Span("- wikipedia.org") 'Настройка ячейки sheet.Cells("B7").Style.TextWrap = TextWrapMode.WordBreak sheet.Cells("B7").Style.VAlign = ReoGridVerAlign.Middle sheet.Cells("B7").Style.HAlign = ReoGridHorAlign.Right
//Получаем экземпляр листа и объединяем ячейки, для удобства var sheet = rgrid.CurrentWorksheet; sheet.MergeRange("B2:F6"); //Добавляем первый фрагмент текста sheet["B2"] = new unvell.ReoGrid.Drawing.RichText() .Regular("Тот самый ") .Bold("Rich Text Format") .Regular(" (часто сокращаемый до ") .Bold("RTF") .Regular(") является проприетарным") .Superscript("[6][7][8]") .Regular(" форматом файла документа с опубликованной спецификацией, разрабатываемой корпорацией Microsoft с ") .Span("1987", textColor: Color.OrangeRed) .Span(" по ", textColor: Color.Black) .Span("2008", textColor: Color.OrangeRed) .Span(" годы для кросс-платформенного документооборота с продуктами Microsoft.", textColor: Color.Black); //Вот так включаем переносы sheet.Cells["B2"].Style.TextWrap = TextWrapMode.WordBreak; //А вот так задаём выравнивание sheet.Cells["B2"].Style.VAlign = ReoGridVerAlign.Middle; sheet.Cells["B2"].Style.HAlign = ReoGridHorAlign.Right; //Добавление абзаца с дополнительными параметрами sheet.MergeRange("B7:F12"); sheet["B7"] = new unvell.ReoGrid.Drawing.RichText() .Span("Тот самый ") .Bold("Apple II") .Regular(" (обозначаемый как apple ][) является 8-битным домашним компьютером.") .NewLine() .Span("Один из первых успешних массовых микрокомпьютеров,") .Superscript("[2]") .Regular(" изначально разработан Стивом Возняком.") .NewLine() .SetStyles(halign: ReoGridHorAlign.Right) .Span("- wikipedia.org"); //Настройка ячейки sheet.Cells["B7"].Style.TextWrap = TextWrapMode.WordBreak; sheet.Cells["B7"].Style.VAlign = ReoGridVerAlign.Middle; sheet.Cells["B7"].Style.HAlign = ReoGridHorAlign.Right;
Результат:
Поддержка импорта/экспорта из/в Excel
ReoGrid поддерживает импорт и экспорт форматированного текста (RTF) из/в файл Excel. Ниже приведён пример отображения текста как в ReoGrid, так и в Excel.
Автозаполнение (Fill data serial)
Автопродолжение списка
Суть данной функции состоит в том, что если нужно заполнить столбец числами, следующими по порядку, то достаточно ввести первые одно-два. После этого, не снимая выделения, нужно навести указатель мыши на прямоугольный маркер в правом нижнем углу нижней ячейки выделения и перетащить его вниз левой кнопкой мыши. Аналогично можно поступить и со строками, только перетаскивать маркер нужно вправо. Подсказкой будет указатель мыши в виде полужирного перекрестия.
Автозаполнение для столбца (в столбце “A” исходные данные, в “C” – в процессе перетаскивания, в “E” – результат)
Автозаполнение для строки (во 2-й строке исходные данные, в 4-й – в процессе перетаскивания, в 6-й – результат)
Автокоррекция формул (Formula Reuse)
Если исходная ячейка содержит формулу, то в процессе автозаполнения в новые ячейки будут подставляться подкорректированные копии содержащейся в исходной ячейке формулы. То есть, если исходной ячейке C2 была формула =B2*2, то после перетаскивания ячейка C5 будет содержать формулу =B5*2. Соответственно, ячейка C7 получит формулу =B7*2.
Начало процесса. Формула введена только в ячейку C2
После перетаскивания. Автоматически подкорерктированная формула вставлена в ячейки C3-C7
Предотвращение автокоррекции формул (Prevent formula reuse)
Для предотвращения автокоррекции формул достаточно использовать абсолютные ссылки на ячейку или диапазон ячеек. Например: вот так: =$B$2 или =B$2
Формула в исходной ячейке
Формула в заполненной ячейке: скопировано без изменений
Автопродолжение списка для нескольких строк или столбцов (Multiple cells fill)
Для диапазона, содержащего несколько строк или столбцов, каждая строка или столбец будет заполняться согласно собственному правилу. В примере показан случай с автозаполнением трёх столбцов.
Исходные данные
Результат
Автозаполнение программным путём (Fill serial by programming)
Для этого достаточно использовать метод AutoFillSerial для выбранного листа. Достаточно указать исходный диапазон ячеек и тот, куда необходимо добавить данные. Пример (иллюстрацию можно увидеть выше): есть исходный диапазон с данными B2:D3, нужно получить и пересчитать значения для диапазона B4:D8.
rgrid.CurrentWorksheet.AutoFillSerial("B2:D3", "B4:D8")
rgrid.CurrentWorksheet.AutoFillSerial("B2:D3", "B4:D8");
Дополнительные примеры
Пример 1. Настраиваемые заголовки
rgrid.CurrentWorksheet.Resize(10, 7) 'Меняем размер и получаем 10 строк и 7 столбцов 'Приводим стиль первого заголовка к типу "Флажок" (Сheckbox) Dim checkBoxHeader = rgrid.CurrentWorksheet.ColumnHeaders(0) checkBoxHeader.Text = String.Empty 'checkBoxHeader.DefaultCellBody = unvell.ReoGrid.CellTypes.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
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 отменит соответствующую операцию. Обычно используется для предотвращения правки ячеек или операций сворачивания/разворачивания
'Пример: текст можно править лишь в чётко определённом диапазоне: Dim editableRange = New RangePosition(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
//Пример: текст можно править лишь в чётко определённом диапазоне: { RangePosition editableRange = new RangePosition(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()); }*/
Пример 3. Использование книги в памяти (Memory Workbook)
Пример включает создание экземпляра книги, добавление листов, создание таблицы с очерченными границами, указанием типов данных, стилей и формул. Результат сохраняется в виде файла формата Excel 2007/2010.
Просмотреть видеодемонстрацию (VB.Net)
'Imports unvell.ReoGrid 'Imports unvell.ReoGrid.DataFormat 'Imports System.IO 'Создание экземпляров таблицы и листа Dim wb = ReoGridControl.CreateMemoryWorkbook() Dim ws As Worksheet = wb.Worksheets(0) 'Объединение ячеек ws.MergeRange("A1:E1") ws.MergeRange("A9:D9") 'Установка типа ячеек Dim FFNum As New NumberDataFormatter.NumberFormatArgs FFNum.DecimalPlaces = 0 FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Minus FFNum.UseSeparator = True ws.SetRangeDataFormat("A4:A8", CellDataFormatFlag.Number, FFNum) ws.SetRangeDataFormat("C4:C8", CellDataFormatFlag.Number, FFNum) Dim FFCur As New CurrencyDataFormatter.CurrencyFormatArgs FFCur.CultureEnglishName = "en-US" 'Культура FFCur.DecimalPlaces = 2 FFCur.PrefixSymbol = "$" ws.SetRangeDataFormat("D4:D8", CellDataFormatFlag.Currency, FFCur) ws.SetRangeDataFormat("E4:E9", CellDataFormatFlag.Currency, FFCur) 'Данные ws("A1") = "Перечень радиокомпонентов электронного устройства" ws("A3") = "№" ws("B3") = "Наименование" ws("C3") = "Количество" ws("D3") = "Цена" ws("E3") = "Сумма" ws("A9") = "Итого:" ws("A4") = "1" ws("A5") = "2" ws("A6") = "3" ws("A7") = "4" ws("A8") = "5" ws("B4") = "ATMEGA8A-PU" ws("B5") = "L7805" ws("B6") = "100 uF 16V" ws("B7") = "10 k 0,25 W" ws("B8") = "BC557C" ws("C4") = "1" ws("C5") = "1" ws("C6") = "2" ws("C7") = "10" ws("C8") = "8" ws("D4") = 1 ws("D5") = 0.20000000000000001 ws("D6") = 0.10000000000000001 ws("D7") = 0.01 ws("D8") = 0.059999999999999998 'Стили Dim MyStyleTitle As New WorksheetRangeStyle With MyStyleTitle .Flag = PlainStyleFlag.FontSize Or PlainStyleFlag.HorizontalAlign Or PlainStyleFlag.VerticalAlign Or PlainStyleFlag.TextWrap .FontSize = 14 .HAlign = ReoGridHorAlign.Center .VAlign = ReoGridVerAlign.Middle .TextWrapMode = TextWrapMode.WordBreak End With Dim MyStyleTableTitle As New WorksheetRangeStyle With MyStyleTableTitle .Flag = PlainStyleFlag.FontStyleBold Or PlainStyleFlag.HorizontalAlign Or PlainStyleFlag.VerticalAlign Or PlainStyleFlag.TextWrap .Bold = True .HAlign = ReoGridHorAlign.Center .VAlign = ReoGridVerAlign.Middle .TextWrapMode = TextWrapMode.WordBreak End With Dim MyStyleTableBody As New WorksheetRangeStyle With MyStyleTableBody .Flag = PlainStyleFlag.AlignAll 'HAlign+VAlign .HAlign = ReoGridHorAlign.Left .VAlign = ReoGridVerAlign.Middle End With Dim MyStyleTableTotal As New WorksheetRangeStyle With MyStyleTableTotal .Flag = PlainStyleFlag.FontStyleBold Or PlainStyleFlag.AlignAll .Bold = True .HAlign = ReoGridHorAlign.Right .VAlign = ReoGridVerAlign.Middle End With ws.SetRangeStyles("A1:E1", MyStyleTitle) ws.SetRangeStyles("A3:E3", MyStyleTableTitle) ws.SetRangeStyles("A4:E8", MyStyleTableBody) ws.SetRangeStyles("A9:E9", MyStyleTableTotal) 'Границы Dim MyStyleSolidBold As New RangeBorderStyle Dim MyStyleSolid As New RangeBorderStyle MyStyleSolidBold.Style = BorderLineStyle.BoldSolid MyStyleSolid.Style = BorderLineStyle.Solid MyStyleSolidBold.Color = Color.Black MyStyleSolid.Color = Color.Black ws.SetRangeBorders("A4:E8", BorderPositions.All, MyStyleSolid) ws.SetRangeBorders("A3:E3", BorderPositions.All, MyStyleSolidBold) ws.SetRangeBorders("A9:E9", BorderPositions.All, MyStyleSolidBold) 'Формулы ws.Cells("E4").Formula = "C4*D4" ws.Cells("E5").Formula = "C5*D5" ws.Cells("E6").Formula = "C6*D6" ws.Cells("E7").Formula = "C7*D7" ws.Cells("E8").Formula = "C8*D8" ws.Cells("E9").Formula = "SUM(E4:E8)" 'Сохранение Dim strFileName As String = Application.StartupPath & "\table.xlsx" If File.Exists(strFileName) = True Then File.Delete(strFileName) wb.Save(strFileName, IO.FileFormat.Excel2007) 'Открытие Process.Start(strFileName) MsgBox("Готово", MsgBoxStyle.Information, "Info")
//using unvell.ReoGrid //using unvell.ReoGrid.DataFormat //using System.IO //Создание экземпляров таблицы и листа var wb = ReoGridControl.CreateMemoryWorkbook(); Worksheet ws = wb.Worksheets[0]; //Объединение ячеек ws.MergeRange("A1:E1"); ws.MergeRange("A9:D9"); //Установка типа ячеек NumberDataFormatter.NumberFormatArgs FFNum = new NumberDataFormatter.NumberFormatArgs(); FFNum.DecimalPlaces = 0; FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Minus; FFNum.UseSeparator = true; ws.SetRangeDataFormat("A4:A8", CellDataFormatFlag.Number, FFNum); ws.SetRangeDataFormat("C4:C8", CellDataFormatFlag.Number, FFNum); CurrencyDataFormatter.CurrencyFormatArgs FFCur = new CurrencyDataFormatter.CurrencyFormatArgs(); FFCur.CultureEnglishName = "en-US"; //Культура FFCur.DecimalPlaces = 2; FFCur.PrefixSymbol = "$"; ws.SetRangeDataFormat("D4:D8", CellDataFormatFlag.Currency, FFCur); ws.SetRangeDataFormat("E4:E9", CellDataFormatFlag.Currency, FFCur); //Данные ws["A1"] = "Перечень радиокомпонентов электронного устройства"; ws["A3"] = "№"; ws["B3"] = "Наименование"; ws["C3"] = "Количество"; ws["D3"] = "Цена"; ws["E3"] = "Сумма"; ws["A9"] = "Итого:"; ws["A4"] = "1"; ws["A5"] = "2"; ws["A6"] = "3"; ws["A7"] = "4"; ws["A8"] = "5"; ws["B4"] = "ATMEGA8A-PU"; ws["B5"] = "L7805"; ws["B6"] = "100 uF 16V"; ws["B7"] = "10 k 0,25 W"; ws["B8"] = "BC557C"; ws["C4"] = "1"; ws["C5"] = "1"; ws["C6"] = "2"; ws["C7"] = "10"; ws["C8"] = "8"; ws["D4"] = 1; ws["D5"] = 0.20000000000000001; ws["D6"] = 0.10000000000000001; ws["D7"] = 0.01; ws["D8"] = 0.059999999999999998; //Стили WorksheetRangeStyle MyStyleTitle = new WorksheetRangeStyle(); MyStyleTitle.Flag = PlainStyleFlag.FontSize | PlainStyleFlag.HorizontalAlign | PlainStyleFlag.VerticalAlign | PlainStyleFlag.TextWrap; MyStyleTitle.FontSize = 14; MyStyleTitle.HAlign = ReoGridHorAlign.Center; MyStyleTitle.VAlign = ReoGridVerAlign.Middle; MyStyleTitle.TextWrapMode = TextWrapMode.WordBreak; WorksheetRangeStyle MyStyleTableTitle = new WorksheetRangeStyle(); MyStyleTableTitle.Flag = PlainStyleFlag.FontStyleBold | PlainStyleFlag.HorizontalAlign | PlainStyleFlag.VerticalAlign | PlainStyleFlag.TextWrap; MyStyleTableTitle.Bold = true; MyStyleTableTitle.HAlign = ReoGridHorAlign.Center; MyStyleTableTitle.VAlign = ReoGridVerAlign.Middle; MyStyleTableTitle.TextWrapMode = TextWrapMode.WordBreak; WorksheetRangeStyle MyStyleTableBody = new WorksheetRangeStyle(); MyStyleTableBody.Flag = PlainStyleFlag.AlignAll; //HAlign+VAlign MyStyleTableBody.HAlign = ReoGridHorAlign.Left; MyStyleTableBody.VAlign = ReoGridVerAlign.Middle; WorksheetRangeStyle MyStyleTableTotal = new WorksheetRangeStyle(); MyStyleTableTotal.Flag = PlainStyleFlag.FontStyleBold | PlainStyleFlag.AlignAll; MyStyleTableTotal.Bold = true; MyStyleTableTotal.HAlign = ReoGridHorAlign.Right; MyStyleTableTotal.VAlign = ReoGridVerAlign.Middle; ws.SetRangeStyles("A1:E1", MyStyleTitle); ws.SetRangeStyles("A3:E3", MyStyleTableTitle); ws.SetRangeStyles("A4:E8", MyStyleTableBody); ws.SetRangeStyles("A9:E9", MyStyleTableTotal); //Границы RangeBorderStyle MyStyleSolidBold = new RangeBorderStyle(); RangeBorderStyle MyStyleSolid = new RangeBorderStyle(); MyStyleSolidBold.Style = BorderLineStyle.BoldSolid; MyStyleSolid.Style = BorderLineStyle.Solid; MyStyleSolidBold.Color = Color.Black; MyStyleSolid.Color = Color.Black; ws.SetRangeBorders("A4:E8", BorderPositions.All, MyStyleSolid); ws.SetRangeBorders("A3:E3", BorderPositions.All, MyStyleSolidBold); ws.SetRangeBorders("A9:E9", BorderPositions.All, MyStyleSolidBold); //Формулы ws.Cells["E4"].Formula = "C4*D4"; ws.Cells["E5"].Formula = "C5*D5"; ws.Cells["E6"].Formula = "C6*D6"; ws.Cells["E7"].Formula = "C7*D7"; ws.Cells["E8"].Formula = "C8*D8"; ws.Cells["E9"].Formula = "SUM(E4:E8)"; //Сохранение string strFileName = Application.StartupPath + "\\table.xlsx"; if (File.Exists(strFileName) == true) File.Delete(strFileName); wb.Save(strFileName, unvell.ReoGrid.IO.FileFormat.Excel2007); //Открытие Process.Start(strFileName); MessageBox.Show("Готово", "Инфо", MessageBoxButtons.OK, MessageBoxIcon.Information);
Пример 4. Создание редактора электронных таблиц начального уровня за 27 минут (VB.Net)
Пример включает все этапы создания проекта в Visual Studio. Исходный код полученного приложения, снабженный комментариями на русском и английском языках, доступен по ссылке, расположенной ниже. При просмотре видео кое-где может потребоваться выставить более высокий темп воспроизведения.
Мини-учебник подготовлен для сайта reogrid.net.
Программный код проверялся для VB.Net/С# 2012 синтаксическим анализатором Visual Studio. Код на Visual Basic проверен тестовым приложением.
В некоторых примерах использованы изображения из английской версии руководства, а также снимок экрана из проекта Euro Truck Simulator 2
Краткие описания функций Excel взяты с официального сайта офисного пакета.