Ускорение сброса в Excel

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Ускорение сброса в Excel

Сообщение lord0n » 27.07.2005 (Ср) 15:03

можа кто знает как ускорить сброс данных в excel из базы данных, а то 300 записей сбрасываются 20 сек., а если их тама будет 10000 - ждать 11 минут.
код такой:

Set oEx = CreateObject("excel.application")
With oEx
.Visible = False
.workbooks.Add

.Range("A1").Select
.ActiveCell.Cells = "Èíâåíòàðèçàöèîííàÿ îïèñü"

.Range("A2").Select
.ActiveCell.Cells = "Àðòèêóë"
.Range("B2").Select
.ActiveCell.Cells = "Íàèìåíîâàíèå"
.Range("C2").Select
.ActiveCell.Cells = "Êîëè÷åñòâî"
.Range("D2").Select
.ActiveCell.Cells = "Ëîò"
.Range("E2").Select
.ActiveCell.Cells = "Ñðîê ãîäíîñòè"
.Range("F2").Select
.ActiveCell.Cells = "Àäðåñ ìåñòà"
.Range("G2").Select
.ActiveCell.Cells = "¹ ïàëëåòû"


RS.MoveFirst
PBar.MaxValue = RS.RecordCount

Do Until RS.EOF
n = n + 1

artold = RS.Fields(0)
aname = RS.Fields(1)
kol = RS.Fields(2)
part = RS.Fields(3)
srok = RS.Fields(4)
adres = RS.Fields(5)
numpal = RS.Fields(6)

.Range("A" & n).Select
.ActiveCell.Cells = artold
.Range("B" & n).Select
.ActiveCell.Cells = aname
.Range("C" & n).Select
.ActiveCell.Cells = kol
.Range("D" & n).Select
.ActiveCell.Cells = part
.Range("E" & n).Select
.ActiveCell.Cells = srok
.Range("F" & n).Select
.ActiveCell.Cells = adres
.Range("G" & n).Select
.ActiveCell.Cells = numpal


PBar.Value = PBar.Value + 1
RS.MoveNext
Loop

.Range("A1:G1").Select
.Selection.Merge
.Selection.HorizontalAlignment = 3
.Selection.VerticalAlignment = 3
.Columns("A:G").EntireColumn.AutoFit
.Range("A2:G2").Select
.Selection.HorizontalAlignment = 3
.Selection.VerticalAlignment = 3
.Range("A1").Select
.Visible = True
.WindowState = 3

End With
DBC
PBar.Clear

где:
RS-открытый рекордсорс
PBar - прогресбар
DBC-функция которая закрывает базу

зарание спасибо

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 27.07.2005 (Ср) 15:38

Знаю (недавно столкнулся с такой проблемой) - эксель тратит много времени на выделение ячеек: пока выделит, пока вставит текст, пока перейдет к следующей строке...
В данном случае создай двумерный массив (матрицу) из рекордсета, и одним движением помести его в нужный Range
А я все практикую лечение травами...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 27.07.2005 (Ср) 15:46

Павлов Максим писал(а):Знаю (недавно столкнулся с такой проблемой) - эксель тратит много времени на выделение ячеек: пока выделит, пока вставит текст, пока перейдет к следующей строке...
В данном случае создай двумерный массив (матрицу) из рекордсета, и одним движением помести его в нужный Range


хех, а ведь это идея, я до этого не додумался
хотел уже создавать файл и туда сбрасывать, а потом открывать :)
кстати насколько большим можно создать масив (я имею введу на сколько строк)

мож еще какие идеи есть?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 27.07.2005 (Ср) 15:49

Точно не знаю, по-моему 32000 с копейками.

з.ы. Для записи в массив пользуй метод GetRows рекордсета...
А я все практикую лечение травами...

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 28.07.2005 (Чт) 3:50

Максимум 65536, это если с первой :)...
Бороться и искать, найти и перепрятать!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 28.07.2005 (Чт) 6:40

Столько же строк в экселе, так что тебе хватит...
А я все практикую лечение травами...

mnzol
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 29.09.2004 (Ср) 11:02

Сообщение mnzol » 28.07.2005 (Чт) 8:58

Эта ссылочка будет в этом случае очень полезной
http://support.microsoft.com/default.as ... -us;247412 :!:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 28.07.2005 (Чт) 9:21

Код: Выделить всё
oSheet.Range("A1").CopyFromRecordset rs

Не знал, не знал... :oops:

mnzol - тебе респект!
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 134

    TopList