Как загрузить готовую таблицу excel в datagridview
Перейти к содержимому

Как загрузить готовую таблицу excel в datagridview

  • автор:

Загрузка данных из Microsoft Excel в DataGridView: Справочник по C#

Создайте проект Windows Form в Microsoft Visual Studio и добавьте на форму три компонента:

    textBox1 — в данном компоненте будет выводится путь, имя и расширение выбранного файла;

Выберете компонент «dataGridView1» и сделайте клик правой клавишей мыши по нему, из появившегося контекстного меню выберете пункт «Свойства».

  • DockNone – свойство задает границы элемента управления, прикрепленные к его родительскому элементу управления и определяет способ изменения его размеров относительно родительского элемента управления. http://msdn.microsoft.com
  • AnchorTop, Bottom, Left, Right — свойство задает границы контейнера, с которым связан элемент управления, и определяет способ изменения его при изменении размеров его родительского элемента. http://msdn.microsoft.com


Пример №1
В данном примере рассмотрено использование функций приложения Microsoft Office Excel из пакета Microsoft Office, c использованием библиотеки объектов Microsoft Excel 14. Данная библиотека позволяет управляемому коду взаимодействовать с объектной моделью приложения Microsoft Office, основанной на модели COM. Сделайте двойной клик по компоненту «button1», вы перейдете в автоматически созданный метод «button1_Click», события компонента «Click».

Перейдите в «Обозреватель решений» и найдите группу «References» которая содержит все ссылки на внешние компоненты в проекте. Сделайте клик правой клавишей мыши по данной группе и выберете из появившегося контекстного меню, пункт «Добавить ссылку…».

У вас откроется окно «Менеджер ссылок – (имя вашего проекта)», в левой части данного окна вам будет предложено выбрать одну из категорий. Visual Studio предоставляет четыре группы для выбора.

  • Сборки — список всех компонентов платформы .NET Framework, ссылки на которые можно добавить.
  • Решение — список всех повторно используемых компонентов, созданных в локальных проектах.
  • COM — список всех COM-компонентов, ссылки на которые можно добавить.
  • Обзор — позволяет осуществлять поиск компонента в файловой системе.

Выберете группу «COM» и ее подгруппу «Библиотеки типов». В центральной части окна вам будет предложен список доступных библиотек для подключения к вашему проекту. Найдите в списке библиотеку «Microsoft Excel 14.0 Object Library» и поставьте галочку рядом с именем данной библиотеки. В нижней части окна нажмите кнопку «ОК».

После добавления библиотеки, у вас появится три новых пункта в обозревателе решений:

  • Microsoft.Office.Core;
  • Microsoft.Office.Interop.Excel;
  • VBIDE.

Для работы с добавленными ссылками необходимо добавить следующие пространства имен с использованием директивы «using»:

  • using System.Reflection; — указывается ссылка на использование типов в пространстве имен «System.Reflection», при этом уточнение использования типа в этом пространстве имен не требуется;
  • using ExcelObj = Microsoft.Office.Interop.Excel; — создается псевдоним пространства имен «Microsoft.Office.Interop.Excel».

В данном примере для открытия файла используется класс «OpenFileDialog», реализующий открытие окна для выбора файла по заданному фильтру «Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx». Данный фильтр так же реализует защиту от выбора файла не относящегося к Excel.

После выбора файла создается новый объект «Application» или приложение «Excel», которое может содержать одну или более книг, ссылки на которые содержит свойство «Workbooks». Книги — объекты «Workbook», могут содержать одну или более страниц, ссылки на которые содержит свойство «Worksheets». Страницы – «Worksheet», могут содержать объекты ячейки или группы ячеек, ссылки на которые становятся доступными через объект «Range». Полученные данные из файла будут заноситься в таблицу «dt», созданную с использованием класса «DataTable».

В коде присутствует проверка, что пользователь действительно выбрал файл, если данное условие выполнено, в текстовое поле с помощью свойства «FileName», класса «OpenFileDialog» помещается путь, имя и расширение выбранного файла в элемент управления «textBox1».

Для открытия существующего документа используется метод «Open» из набора «Excel.Workbooks», в качестве основного параметра указывается путь к файлу, остальные параметры остаются пустыми.

Полный список параметров метода «Open» приведен в таблице ниже.

Имя параметра Описание
FileNamee Имя открываемого файла
UpdateLinks Способ обновления ссылок в файле
ReadOnly При значении true открытие только для чтения
Format Определение формата символа разделителя
Password Пароль доступа к файлу (до 15 символов)
WriteResPassword Пароль на сохранение файла
IgnoreReadOnlyRecommended При значении true отключается вывод запроса на работу без внесения изменений
Origin Тип текстового файла
Delimiter Разделитель при Format = 6
Editable Используется только для надстроек Excel 4.0
Notify При значении true имя файла добавляется в список нотификации файлов
Converter Используется для передачи индекса конвертера файла используемого для открытия файла
AddToMRU При true имя файла добавляется в список открытых файлов
Local
CorruptLoad

Для доступа к листу из книги «Workbook», используется метод «Sheets.get_Item» с указанием номера листа. Нумерация листов начинается с 1.

Чтобы получить объект Microsoft.Office.Interop.Excel.Range, который представляет все ячейки, содержащие значение на данный момент, используется свойство станицы «Worksheet.UsedRange».

После получения объекта «Range», с помощью цикла «For» загружается первая строка из таблицы и каждое значение устанавливается в качестве имени колонки таблицы.

Далее таким же способом загружаются все оставшиеся строки с добавлением в таблицу.

По завершении загрузки данных с указанного листа, сформированная таблица «dt» подключается к элементу управления «dataGridView1». Так же открытый объект «Application» или приложение «Excel» закрывается.

Полный листинг рассмотренного кода, приведен ниже, добавьте его в метод «button1_Click» компонента «button1».


Пример №2
Данный пример в качестве механизма получения данных использует класс «OleDbConnection», который предоставляет открытое подключение к источнику данных. При подключении необходимо указать строку специальную строку с несколькими параметрами:

  • Provider=Microsoft.ACE.OLEDB.12.0 – имя поставщика OLE DB;
  • Data Source=ofd.FileName – путь к источнику данных полученный при выборе файла в диалоговом окне;
  • Extended Properties='Excel 12.0 XML' – параметр расширенного подключения;
  • HDR = YES — указывает, что первая строка содержит имена столбцов, а не данные. Значение «NO» свидетельствует, что лист не содержит заголовков столбцов.

Драйвер Excel считывает определенное количество строк (по умолчанию 8 строк) в указанный источник для определения типа данных каждого столбца. Если столбец содержит смешанные типы данных, особенно если числовые данные смешаны с текстовыми данными, драйвер принимает решение в пользу того типа данных, которого больше, и возвращает значения NULL в ячейки, содержащие данные другого типа. (В случае равенства преимущество получает числовой тип.) Большинство параметров форматирования ячеек в листе Excel не затрагивает это определение типа данных. Можно изменить поведение драйвера Excel, указав режим импорта. Чтобы указать режим импорта, необходимо добавить параметр IMEX=1 к значению расширенных свойств в строке соединения. В этом состоянии драйвер принудительно преобразовывает смешанные данные в текст. После составления строки подключения, устанавливается соединение с указанным файлом через класс «OleDbConnection»

При успешном подключении к источнику данных Excel с помощью «Microsoft ADO.NET», создаётся расположенный в памяти кэш данных, с использованием класса «DataSet». Далее извлекается список таблиц метаданных с помощью метода «GetOleDbSchemaTable».

После получения таблицы с листами, получаем название первого листа, для создания sql запроса к файлу. Изменяя значение «Rows», вы изменяете, номер листа в книге, к которому будет выполнен запрос.

Далее при помощи класса «OleDbDataAdapter» и его метода «Fill» данные загружаются в Dataset – «ds».

Полный листинг примера приведен ниже.

Пример №3

Для работы с документами также можно воспользоваться библиотеками сторонних производителей. Для примера рассмотрим библиотеку «Excel Data Reader – Read Excel files in .Net». Данный компонент вы можете скачать как с нашего сайта Rusfolder.net, так и с сайта производителя Codeplex.com.

Скачайте данный компонент и перейдите в обозреватель решений. Найдите группу «References», в которой содержатся все ссылки на внешние компоненты в проекте. Сделайте клик правой клавишей мыши по данной группе и выберете из появившегося контекстного меню, пункт «Добавить ссылку…».

Выберете группу «Обзор», данная группа позволяет вам осуществить поиск компонента в файловой системе. Нажмите на кнопку «Обзор…», расположенную в нижней части окна менеджера ссылок.

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

  • Net20 — директория содержит библиотеки необходимые при работе с .Net Framework версии от 2.0 до 4.0;
  • Net45 – директория содержит библиотеки необходимые при работе с .Net Framework версии 4.5.

При создании данного проекта был выбран .Net Framework версии 3.5, поэтому переходим в директорию «Net20» и выбираем две библиотеки расположенные в ней, это «Excel.dll» и «ICSharpCode.SharpZipLib.dll». После выбора данных библиотек, нажмите на кнопку «Добавить» расположенную в нижней части данного окна.

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

После добавления библиотек, вы увидите их название, и путь к ним в центральной части окна менеджера ссылок. Так же напротив каждой из них будет установлена галочка, это означает, что в проект будут добавлены ссылки на обе библиотеки. В левой части окна будет выведено описание библиотек, это «Имя», «Автор» и «Версия файла». Нажмите на кнопку «ОК», расположенную в нижней части окна менеджера.

После добавления ссылок на библиотеки, у вас появится два новых пункта в обозревателе решений.

Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму элемент управления «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button3_Click», события компонента «Click». Добавьте приведенный ниже листинг в тело данного метода.

В данном примере рассмотрен листинг реализующий вставку данных скопированных в буфер обмена из файла Excel. Для получения данных из буфера обмена используется класс «Clipboard» с использованием его метода «GetDataObject», который извлекает данные находящиеся в данный момент, в системном буфере обмена. Во избежание ошибок с форматом получаемых данных, используется интерфейс «IDataObject», который предоставляет не зависящий от формата, механизм передачи данных.

Более подробно ознакомиться с классом «Clipboard», вы можете на сайте Microsoft MSDN.

Так как в буфере обмена, все данные содержаться в виде одной строки и их необходимо разбить на массив данных.

Данную задачу решает метод «String.Split». Метод возвращает строковый массив, содержащий подстроки разделенные элементами «r» — возврат каретки и «n» — перевод строки.

Полученный массив строк содержит «t» — знак горизонтальной табуляции, который разделят значения ячеек. Для добавления столбцов с заголовками (если такая строка скопирована в буфер обмена), необходимо взять из массива первый элемент и с использованием метода «String.Split» разбить на новый массив, указав в качестве элемента разделения знак горизонтальной табуляции — «t».

Далее необходимо с помощью цикла «foreach» пройти по всему массиву и добавить новые колонки с указанием в качестве имени полученное значение.

После получения всех данных из буфера обмена и заполнения таблицы «dt», она устанавливается в качестве источника данных элементу управления «dataGridView1». Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму компонент «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button4_Click», события компонента «Click». Добавьте приведенный ниже полный листинг в тело данного метода.

Пример №5

Добавление данных вручную.

В первых трех примерах присутствует строка закрытия подключения к выбранному файлу. Например:

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

Вы так же можете самостоятельно рассмотреть и другие компоненты по работе с файлами Microsoft Excel, например библиотеки от «GemBoxSoftware».

Справочник по C#

Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок.
Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше

Загрузка данных из Microsoft Excel в DataGridView

  • Пример №1 – получение данных с использованием библиотеки объектов «Microsoft Excel 14.0»;
  • Пример №2 – получение данных с использованием класса «OleDbConnection»;
  • Пример №3 – получение данных с использованием библиотеки «Excel Data Reader – Read Excel files in .Net»;
  • Пример №4 – получение данных из буфера обмена используется класс «Clipboard»;
  • Пример №5 – ручной ввод;
  • textBox1 — в данном компоненте будет выводится путь, имя и расширение выбранного файла;
  • button1 – кнопка для запуска процесса получения данных из выбранного файла;
  • dataGridView1 – элемент управления необходимый для отображения полученных данных.

  • DockNone – свойство задает границы элемента управления, прикрепленные к его родительскому элементу управления и определяет способ изменения его размеров относительно родительского элемента управления. http://msdn.microsoft.com
  • AnchorTop, Bottom, Left, Right — свойство задает границы контейнера, с которым связан элемент управления, и определяет способ изменения его при изменении размеров его родительского элемента. http://msdn.microsoft.com

  • Сборки — список всех компонентов платформы .NET Framework, ссылки на которые можно добавить.
  • Решение — список всех повторно используемых компонентов, созданных в локальных проектах.
  • COM — список всех COM-компонентов, ссылки на которые можно добавить.
  • Обзор — позволяет осуществлять поиск компонента в файловой системе.

  • Microsoft.Office.Core;
  • Microsoft.Office.Interop.Excel;
  • VBIDE.

  • using System.Reflection; — указывается ссылка на использование типов в пространстве имен «System.Reflection», при этом уточнение использования типа в этом пространстве имен не требуется;
  • using ExcelObj = Microsoft.Office.Interop.Excel; — создается псевдоним пространства имен «Microsoft.Office.Interop.Excel».
Имя параметра Описание
FileNamee Имя открываемого файла
UpdateLinks Способ обновления ссылок в файле
ReadOnly При значении true открытие только для чтения
Format Определение формата символа разделителя
Password Пароль доступа к файлу (до 15 символов)
WriteResPassword Пароль на сохранение файла
IgnoreReadOnlyRecommended При значении true отключается вывод запроса на работу без внесения изменений
Origin Тип текстового файла
Delimiter Разделитель при Format = 6
Editable Используется только для надстроек Excel 4.0
Notify При значении true имя файла добавляется в список нотификации файлов
Converter Используется для передачи индекса конвертера файла используемого для открытия файла
AddToMRU При true имя файла добавляется в список открытых файлов
Local
CorruptLoad
  • Provider=Microsoft.ACE.OLEDB.12.0 – имя поставщика OLE DB;
  • Data Source=ofd.FileName – путь к источнику данных полученный при выборе файла в диалоговом окне;
  • Extended Properties=’Excel 12.0 XML’ – параметр расширенного подключения;
  • HDR = YES — указывает, что первая строка содержит имена столбцов, а не данные. Значение «NO» свидетельствует, что лист не содержит заголовков столбцов.

  • Net20 — директория содержит библиотеки необходимые при работе с .Net Framework версии от 2.0 до 4.0;
  • Net45 – директория содержит библиотеки необходимые при работе с .Net Framework версии 4.5.

Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму элемент управления «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button3_Click», события компонента «Click». Добавьте приведенный ниже листинг в тело данного метода.
Пример № 4

В данном примере рассмотрен листинг реализующий вставку данных скопированных в буфер обмена из файла Excel. Для получения данных из буфера обмена используется класс «Clipboard» с использованием его метода «GetDataObject», который извлекает данные находящиеся в данный момент, в системном буфере обмена. Во избежание ошибок с форматом получаемых данных, используется интерфейс «IDataObject», который предоставляет не зависящий от формата, механизм передачи данных.

Более подробно ознакомиться с классом «Clipboard», вы можете на сайте Microsoft MSDN.

Далее необходимо с помощью цикла «foreach» пройти по всему массиву и добавить новые колонки с указанием в качестве имени полученное значение.
После получения всех данных из буфера обмена и заполнения таблицы «dt», она устанавливается в качестве источника данных элементу управления «dataGridView1». Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму компонент «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button4_Click», события компонента «Click». Добавьте приведенный ниже полный листинг в тело данного метода.

Пример №5

Добавление данных вручную.

Import Excel to DataGridView and Modify or Add new Data to Excel using C# and Vb.Net

To interact with an Excel file (or any other Microsoft office app) from your Windows Forms application, you’ll have to first add a reference named Microsoft Excel 12.0 Object Library to your project and later import or use a namespace named Microsoft.Office.Interop.Excel inside the applications source.

First, Add a Reference

After you have created the project, add a reference. From the top menu (in your projects IDE), select the Project tab and choose Add Reference… It will open the Add Reference window. Select the COM tab and find Microsoft Excel 12.0 Object Library (or a higher version) from the list. Select it and Click Ok. See the image.

Windows Forms Add Reference for Excel

We need few controls on our form. Therefore, open the form design window and add a button , a dataGridView control and an OpenFileDialog control.

In the beginning of the program, I have added the namespace Excel = Microsoft.Office.Interop.Excel; which provides me all the classes, methods and properties to interact with an Excel file.

I have also added the namespace using System.Drawing; (in C# only. Its readily available in VB). This is optional though. Since, I am using the Color property to change the color of the first columns value in the Grid. I am using this property inside the dataGridView1_RowStateChanged event.

I have explained the properties and events below.

The procedure “Excel2Grid”

This procedure is called after you open the file dialog and select an Excel file. It first creates the headers for the Grid. Next, it will add buttons to the last column of each row.

DataGridViewButtonColumn btn = new DataGridViewButtonColumn();

Finally, it creates and adds the rows in the DataGridView, using data from the Excel sheet.

The Method ProcessCmdKey()

This method is used to handle keys . Usually, when you press the Enter key on a DataGridView cell, it would go to the next row. The cursor Moves vertically down. Using this method I’ll override the Enter keys default behavior and convert it to Tab key (function), which moves the cursor horizontally that is, the cursor moves to the next cell.

Using ProcessCmdKey to Override Enter Key in WinForms

DataGridView Event CellContentClick

The dataGridView1_CellContentClick is called when you click inside a Grid’s cell (any cell in any row). The last cell in each row has a Button, to save the data back to Excel file. Clicking the button will call this event and it would first check the control that was clicked. If it’s a button, it will extract data from that row and save the data in the Excel sheet.

There is a condition. It checks if the first cell value is Read only (the values are Gray in Color). If yes, then this rows data already exists in the Excel sheet. Therefore, it would modify the data. Else, it would save the record in a new row in the Excel sheet.

DataGridView Event RowStateChanged

I am using the dataGridView1_RowStateChanged event to identify exiting data in Excel. Therefore, when you select and import Excel’s data to the DataGridView, it would set the first cell’s value as Read only and change the fore color to Gray.

Using DataGridView RowStateChanged Event to Set Cell as Read only

The color will differentiate between the existing and new data.

There may be other ways to deal with Excel data using a DataGridView in a Windows Forms application. This is one way you can do it. I think its simple.

The example does not explain a typical CRUD operation. It however gives you an idea about how you can import data from Excel file into a DataGridView, manipulate the data or create new data in the Grid and finally save the new or modified data back to the Excel sheet.

You can add other controls to the DataGridView, like binding it with a Combo Box or add images etc. to do other complex operations.

Import and Export Excel to DataGridView in C# and VB.NET

GemBox.Spreadsheet.WinFormsUtilities namespace enables interoperability between GemBox.Spreadsheet and DataGridView control from a Windows Forms application.

The namespace provides a DataGridViewConverter class which you can use to import or export an Excel file to the DataGridView control from C# and VB.NET.

Besides the cell data, some additional information is imported or exported as well, such as hyperlinks, formatting, and images.

Excel file imported to a Windows Forms application with GemBox.SpreadsheetScreenshot of an Excel file imported to a Windows Forms application Windows Forms application that imports data from Excel file with GemBox.SpreadsheetScreenshot of a Windows Forms application with imported Excel data

The following example shows how you can export an Excel file into the DataGridView control using the DataGridViewConverter.ExportToDataGridView method and how to import the DataGridView control to an Excel file using the DataGridViewConverter.ImportFromDataGridView method.

See also

Create, read, write Excel files from Classic ASP

Create, read, write Excel files from Classic ASP

Next steps

GemBox.Spreadsheet is a .NET component that enables you to read, write, edit, convert, and print spreadsheet files from your .NET applications using one simple API.

GemBox.Spreadsheet is a .NET component that enables you to read, write, edit, convert, and print spreadsheet files from your .NET applications using one simple API.

Our customers

What do they say

I cannot speak highly enough about this product and company. We have been using GemBox Software for over 10 years. The product has always kept pace with the changing versions of Excel and C# .NET and now for us .NET Core. The application is performant and eliminates the need for Interop or other antiquated technologies. The support has always been AMAZING, intelligent, and responsive. For our consulting engagements and our own products, we rely on GemBox to make sure we have the BEST Excel support available. I cannot thank you enough for your support and looking forward to the next 10 years!

Spreadsheet has been solid in its quality and back-end support. I am the sole developer at a small company and your product allows me to produce detailed and complicated reports in a fraction of the time it would take me otherwise. I spread the word whenever I have the chance.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *