загрузка данных

gulyaev.s
Дата: 20.01.2010 16:24:18
подскажите самый быстрый способ как из датасет перекинуть в эксель данные
использую следующий код

слишком долго обрабатывает 4 000 записи , что будет свыше....

            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application.12")
            oExcel.visible = True
            oBook = oExcel.Workbooks.Add()
            oSheet = oBook.Worksheets(1)
            Dim i1 As Integer
            Dim j1 As Integer
                 
                For i1 = 0 To DataGridView1.RowCount - 2
                    For j1 = 0 To DataGridView1.ColumnCount - 1
                        oSheet.Cells(i1 + 1, j1 + 1) = _
                            DataGridView1(j1, i1).Value.ToString()
                    Next
                Next


Ex_Soft
Дата: 20.01.2010 17:30:57

тынць
_________________
"Helo, word!" - 17 errors 56 warnings

Posted via ActualForum NNTP Server 1.4

gulyaev.s
Дата: 20.01.2010 18:33:52
Ex_Soft

тынць
_________________
"Helo, word!" - 17 errors 56 warnings


не помогло.
визибл фолс поставил существенного уменьшения нету
далее скринт тоже от кличил, так он после окончании вообще не выресовывался и глючил, как будто ничего не загружалось в него,
есть какие ещё методы?
МСУ
Дата: 20.01.2010 18:35:42
gulyaev.s
самый быстрый способ как из датасет перекинуть в эксель данные

Быстрее вставки в Range-диапазон, думаю, не существует:

DataTable dt = GetData();
// Подготовка данных в object[,]
object[,] data = new object[dt.Rows.Count, dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
    for (int j = 0; j < dt.Columns.Count; j++)  
        data[i, j] = dt.Rows[i][j];
Excel.Range rg = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[dt.Rows.Count,dt.Columns.Count]);
rg.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, data);
Ex_Soft
Дата: 20.01.2010 20:31:13

gulyaev.s

визибл фолс поставил существенного уменьшения нету

Я так понял Вы тынць по диагонали читали
/topic/488975#4850571


ScreenUpdating=true 2.3906250
ScreenUpdating=false 1.3437500
Visible=false 1.3593750

Как видите - отключение Visible - ничего не дает.
gulyaev.s

далее скринт тоже от кличил, так он после окончании вообще не выресовывался и глючил, как будто ничего не загружалось в него

Гм... Всю Одессу удовлетворяет, а Вас одного - нЭт...
_________________
"Helo, word!" - 17 errors 56 warnings

Posted via ActualForum NNTP Server 1.4

gulyaev.s
Дата: 20.01.2010 22:34:39
МСУ
gulyaev.s
самый быстрый способ как из датасет перекинуть в эксель данные

Быстрее вставки в Range-диапазон, думаю, не существует:

DataTable dt = GetData();
// Подготовка данных в object[,]
object[,] data = new object[dt.Rows.Count, dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
    for (int j = 0; j < dt.Columns.Count; j++)  
        data[i, j] = dt.Rows[i][j];
Excel.Range rg = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[dt.Rows.Count,dt.Columns.Count]);
rg.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, data);



а на vb.net нету примера?
МСУ
Дата: 20.01.2010 22:40:30
gulyaev.s
а на vb.net нету примера?

Я думаю, нужно обладать минимумом знаний, чтобы вбшнику переписать это под VB.NET :)
gulyaev.s
Дата: 20.01.2010 22:58:51
Ex_Soft

gulyaev.s

визибл фолс поставил существенного уменьшения нету

Я так понял Вы тынць по диагонали читали
/topic/488975#4850571


ScreenUpdating=true 2.3906250
ScreenUpdating=false 1.3437500
Visible=false 1.3593750

Как видите - отключение Visible - ничего не дает.
gulyaev.s

далее скринт тоже от кличил, так он после окончании вообще не выресовывался и глючил, как будто ничего не загружалось в него

Гм... Всю Одессу удовлетворяет, а Вас одного - нЭт...
_________________
"Helo, word!" - 17 errors 56 warnings



может ScreenUpdating не работает потому что у меня 2007 excel
ошибка такая по процессору видно, что идет обработка, после окончании смотрим рисунок, данных нету.
gulyaev.s
Дата: 21.01.2010 10:12:39
Ex_Soft,


разобрался почему не отображает,
screen = true забыл написать, но существенной производительности не заметил.......
поидее должна быть в два раза......
Ex_Soft
Дата: 21.01.2010 11:17:12

gulyaev.s

существенной производительности не заметил.......
поидее должна быть в два раза......

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

P.S. Не занимайтесь оверквотингом
_________________
"Helo, word!" - 17 errors 56 warnings

Posted via ActualForum NNTP Server 1.4