Главная | Журнал | Форум | Wiki | DRKB |
|
Из Excel в DataGridЭта статья демонстрирует простой способ, как получить доступ к данным, скопированным из листа Microsoft Excel и поместить их на форму в DataGrid. Многие пользователи традиционно используют Excel в качестве примитивного хранилища и, по-привычке, пытаются копировать данные из экселя в другое приложение. Данный пример является хорошей отправной точкой для решения подобных потребностей. Для начала сгруппируем основные этапы задачи извлечения скопированных данных из буфера обмена: • Доступ и извлечение данных из буфера обмена Во-первых, полезно будет слегка разобраться с терминами, используемыми в данном примере: • Буфер обмена: тут всё понятно. В .NET для этого есть специальный класс, который так и называется Clipboard. Его-то мы и будем использовать для извлечения данных
из буфера обмена. Доступ и извлечение данных буфера обменаИтак, заглянем в буфер обмена и распакуем его содержимое в объект-контейнер. Для этого воспользуемся методом GetDataObject класса Clipboard и поместим содержимое в IDataObject: Dim objPresumablyExcel As IDataObject = Clipboard.GetDataObject() Теперь проверим, действительно ли содержимое буфера обмена принадлежит экселю. Данные, скопированные из Excel помещаются в буфер обмена в виде значений, разделённых запятыми и символом окончания строки между двумя строками данных. Поэтому, для проверки, воспользуемся методом GetDataPresent объекта IDataObject, передав ему в качестве параметра значение CommaSeperatedValue класса DataFormats. If (objPresumablyExcel.GetDataPresent(DataFormats. _ CommaSeparatedValue)) Then ... ... ... End If Форматирование данных перед помещением их в DataGridДля форматирования "сырых" данных воспользуемся объектом DataTable, который впоследствие будет привязан к DataGrid. Dim tblExcel2WinData As New DataTable Преобразовать данным можно многими способами. В качестве примера, сбросим содержимое IDataObject в поток данных (объект класса StreamReader): Dim srReadExcel As New StreamReader(CType(objPresumablyExcel. _ GetData(DataFormats.CommaSeparatedValue), Stream)) Далее будем в цикле считывать данные построчно: While (srReadExcel.Peek() > 0) ... ... ... End While Внутри цикла каждая считанная строка из объекта StreamReader будет помещаться в объект DataTable. Промежуточно будем помещать считанную строку в переменную типа String: Dim sFormattedData As String sFormattedData = srReadExcel.ReadLine() Строка в переменной теперь содержит все значения строки из экселя, разделённые запятой. Преобразуем эту переменную в массив: Dim arrSplitData As Array arrSplitData = sFormattedData.Split(",") Количество элементов массива эквивалентно числу столбцов данных, скопированных из листа Excel. Добавим в DataTable такое же количество столбцов: If tblExcel2WinData.Columns.Count <= 0 Then For iLoopCounter = 0 To arrSplitData.GetUpperBound(0) tblExcel2WinData.Columns.Add() Next End If Наконец, в цикле пройдёмся по массиву, чтобы добавить содержимое отдельных ячеек в строку DataTable и добавим строку в DataTable: Dim iLoopCounter As Integer Dim rowNew As DataRow rowNew = tblExcel2WinData.NewRow() For iLoopCounter = 0 To arrSplitData.GetUpperBound(0) rowNew(iLoopCounter) = arrSplitData.GetValue(iLoopCounter) Next tblExcel2WinData.Rows.Add(rowNew) Привязка данных к DataGridThe copied Excel Sheet data is successfully replicated and contained in the DataTable object. Скопированые данные с листа Excel успешно помещены в объект DataTable. Теперь остаётся связать объект DataTable с DataGrid: dgrExcelContents.DataSource = tblExcel2WinData.DefaultView() И, вуаля, данные из листа Excel волшебно появились в DataGrid! Скачать исходник примера - 6 кб |
Основные разделы сайта
|
|