Вставка данных из буфера Excel в Datagrid

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Predator
Обычный пользователь
Обычный пользователь
 
Сообщения: 74
Зарегистрирован: 10.12.2002 (Вт) 18:55
Откуда: Russia

Вставка данных из буфера Excel в Datagrid

Сообщение Predator » 13.12.2008 (Сб) 16:07

Подскажите как реализовать вставку данных из буфера Excel в Datagrid.

Ну очень надо...
все будет хорошо или нет тогда все будет плохо...

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Вставка данных из буфера Excel в Datagrid

Сообщение HandKot » 15.12.2008 (Пн) 7:59

а Excel есть буфер или что Вы под этим подразумеваете?
I Have Nine Lives You Have One Only
THINK!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Денис » 15.12.2008 (Пн) 8:48

Predator
Буфер обмена предназначен не для этого. Если вам нужны данные из Excel - подключайте файл методами ODBC и загружайте.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Predator
Обычный пользователь
Обычный пользователь
 
Сообщения: 74
Зарегистрирован: 10.12.2002 (Вт) 18:55
Откуда: Russia

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Predator » 15.12.2008 (Пн) 21:24

важно не подгрузить данные, а оставить пользователю возможность перенести некий массив данных прямо в datagrid...

вставку данных с начального элемента я уже почти реализовал... осталось добиться чтоб в произвольное место мог вставить....

если все получится код покажу...

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 25.12.2008 (Чт) 16:12

Вариант вставки в DataGridView из OpenOffice Calc и MS Excel
private void btnCopyPaste_Click_1(object sender, EventArgs e)
{
try
{
IDataObject objPresumablyExcel = Clipboard.GetDataObject();

//Proceed if some copied data is present
if ((objPresumablyExcel != null))
{

//Next proceed only of the copied data is in the CSV format indicating Excel content
if ((objPresumablyExcel.GetDataPresent(DataFormats.CommaSeparatedValue))) // для Excel
{

//Cast the copied data in the CommaSeparatedValue format & hold in a StreamReader Object
StreamReader srReadExcel = new StreamReader((Stream)objPresumablyExcel.GetData // для Excel(DataFormats.CommaSeparatedValue));
// StringReader srReadExcel = new StringReader((string)objPresumablyExcel.GetData // для OpenOffice Calc(DataFormats.UnicodeText));
string sFormattedData;

//Set the delimiter character for use in splitting the copied data
//char[] charDelimiterArray = { ' ' }; // для OpenOfficeCalc там маленький квадратик между кавычками просто его не видно его нужно скопировать и встваить
char[] charDelimiterArray = {';'} // для Excel все остальное для всех одинаково

//Define a DataTable to hold the copied data for binding to the DataGrid
DataTable tblExcel2WinData = new DataTable();

//Loop till no further data is available
while ((srReadExcel.Peek() > 0))
{
//Array to hold the split data for each row
Array arrSplitData;

//Multipurpose Loop Counter
int iLoopCounter = 0;

//Read a line of data from the StreamReader object
sFormattedData = srReadExcel.ReadLine();
//sFormattedData.Replace(' ',';');
//Split the string contents into an array
arrSplitData = sFormattedData.Split(charDelimiterArray);

if (tblExcel2WinData.Columns.Count <= 0)
{
for (iLoopCounter = 0; iLoopCounter <= arrSplitData.GetUpperBound(0); iLoopCounter++)
{
tblExcel2WinData.Columns.Add();
}
iLoopCounter = 0;
}

//Row to hold a single row of the Excel Data
DataRow rowNew = tblExcel2WinData.NewRow();


for (iLoopCounter = 0; iLoopCounter <= arrSplitData.GetUpperBound(0); iLoopCounter++)
{
rowNew[iLoopCounter] = arrSplitData.GetValue(iLoopCounter);
}
iLoopCounter = 0;

//Add the row back to the DataTable
tblExcel2WinData.Rows.Add(rowNew);

rowNew = null;
}

//Close the StreamReader object
srReadExcel.Close();

//Bind the data to the DataGrid
dgrExcelContents.DataSource = tblExcel2WinData.DefaultView;
}
else
{
Console.WriteLine("Clipboard data does not seem to be copied from Excel!");
}
}
// else
// {
// Console.WriteLine("Clipboard is empty!");
// }
//}
catch (Exception exp)
{
Console.WriteLine(exp.Message);
}
}
Данный код взял из форума добрый человек подсказал, ему за это спасибо, потом я его адаптировал к любому текстовому или электронных таблиц редакторах

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Вставка данных из буфера Excel в Datagrid

Сообщение alibek » 25.12.2008 (Чт) 16:23

Bruins888, ну и зачем ты привел эту портянку? Вдобавок неотформатированную? Вдобавок на C?
Суть кода в двух строчках, их и напиши.
Lasciate ogni speranza, voi ch'entrate.

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 29.12.2008 (Пн) 16:15

1)Кому надо тот и разберется! и задаст вопросы.
2) Для решения двух строк не достаточно! Если знаешь приведи.
3) Это язык C# ничем практически не отличается от Visual Basic. те же библиотеки. А в синтаксисе работы с оператором на C# if(.....) { } и Visual Basic if ..... end if камней преткновения не вижу. Я не использовал указатели unsafe кода которые Basic по-моему не поддерживает.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Вставка данных из буфера Excel в Datagrid

Сообщение alibek » 29.12.2008 (Пн) 16:27

Bruins888 писал(а):Я не использовал указатели unsafe кода которые Basic по-моему не поддерживает.

Зато ты использовал объекты, которые отсутствуют в VB.
Lasciate ogni speranza, voi ch'entrate.

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 29.12.2008 (Пн) 16:31

Какие?

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 29.12.2008 (Пн) 16:40

Я думаю System, System.Data, System.IO, System.Windows.Forms интерфейсная ссылка IDataObject , в Visual Basic 2005 точно все это есть, А мы про какой Basic если VB 6.0, то сорри, если VB 2005 то тогда должно быть все ОК.
Если я могу использовать, и было не раз, библиотеки написанные на VB 2005 в C# то почему нельзя наоборот. У них же общий промежуточный CIL код!

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 29.12.2008 (Пн) 16:57

alibek, Если можно приведи список объектов которых нет в VB. Насчет форматирования текста то да, но это же C поэтому и пишешь как хочется

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Вставка данных из буфера Excel в Datagrid

Сообщение alibek » 29.12.2008 (Пн) 16:58

StreamReader, DataTable, откуда ты их возьмешь?
Lasciate ogni speranza, voi ch'entrate.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Вставка данных из буфера Excel в Datagrid

Сообщение VVitafresh » 29.12.2008 (Пн) 16:59

Bruins888 писал(а):но это же C поэтому и пишешь как хочется

Аргумент убийственный :twisted:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Bruins888
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 25.12.2008 (Чт) 16:02

Re: Вставка данных из буфера Excel в Datagrid

Сообщение Bruins888 » 30.12.2008 (Вт) 11:55

Объект DataTable можно взять из пространства имен System.Data, объекты StreamReader, StringReader можно взять из пространства имен System.IO. на Visual Basic 2005, такие объекты присутствует, это точно!

Пишу на Visual Basic 2005 приведенный ранее пример

//Обработчик кнопки вставки для выделенного фрагмента данных Excel в DataGridView
Private Sub btnPaste_Click(ByVal sender As System.Object, _
(ByVal e As System.EventArgs) Handles _
BtnPaste.Click
Try
Dim itfObjExcel As System.Windows.Forms.IDataObject // объявляем интерфейсную ссылку для хранения выделеннго
itfObjExcel = System.Windows.Forms.Clipboard.GetDataObject() // копируем
If itfObjExcel != Nothing Then
//проверка Excel?
If itfObjExcel.GetDataPresent(System.Windows.Forms.DataFormats.CommaSeparatedValue) = True Then
Dim readExcel As new System.IO.StreamReader((System.IO.Stream) _
itfObjExcel.GetData(System.Windows.Forms.DataFormats.CommaSeparatedValue)
Dim sFormatDate As System.String //для хранения выделеных данных
Dim ch As New System.Char() = {';'} //хранение символа разделителя
Dim table As New System.Data.DataTable() // хранение выделенных данных в объекте Table
Do While readExcel.Peek() >0
Dim arrayData As New System.Array() // хранение преобразованной строки в массиве для передачи Row
Dim counter As System.Integer = 0
sFormatDate = readExcel.ReadLine()
arrayData = sFormatDate.Split(ch)
If table.Columns.Count <= 0 Then
For counter = 0 To counter <= arrayData.GetUpperBound(0)
table.Columns.Add()
Next
counter = 0
End If
Dim row As New System.Data.DataRow()
row = table.NewRow()
For counter=0 To counter <= arrayData.GetUpperBound(0)
row(counter)=arrayData.GetValue(counter)
Next
counter = 0
table.Rows.Add(row)
row = Nothing
Loop
readExcel.Close()
System.Windows.Forms.DataGridView.DataSource = table.DefaultView
Else
MsgBox("Data not Excel")
End If
End If
Cath olExeption As New System.Exception()
MsgBox(olException.Message)
End
Finally
If readExcel != Nothing Then
readExcel.Dispose()
End If
End Try

Прошу не ругать если в синтаксисе я что то упустил я на Basic не писал уже года 3-4 подзабыл. Но код привел, вам и
решать использовать его или что то другое придумать.

*
Я привел код На VB 2005 с библиотекой NetFrameWork 2.0 в ней 100% присутствуют все объекты мною использованные,
по поводу DataTable, VB 2005 поддерживает технологию ADO.NET значит данный объект и объект DataRow там есть 100% (namespace System.Data). VB 2005 поддерживает систему ввода вывода из пространства имен System.IO 100% значит объект StreamReader присутствует.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Вставка данных из буфера Excel в Datagrid

Сообщение alibek » 30.12.2008 (Вт) 15:03

Bruins888 писал(а):Объект DataTable можно взять из пространства имен System.Data, объекты StreamReader, StringReader можно взять из пространства имен System.IO. на Visual Basic 2005, такие объекты присутствует, это точно!

Откуда ты их возьмешь в VB6?
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 235

    TopList