Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Заполнение листа в Excel / 12 сообщений из 12, страница 1 из 1
29.12.2004, 17:53
    #32850420
sraider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Заполняю Excel'овскую таблицу так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set ExcelApp = CreateObject("Excel.Application")
Set ExcelWbk = ExcelApp.Workbooks.Add()
Set ExcelWsh = ExcelWbk.Worksheets( 1 )
...

' вот тут сам процесс
Do Until ...
  ...
  ExcelWsh.Cells(I, J).Value = Значение
Loop

Но! Работает это очень-очень медлено. Над тысячей значений призадумывается несколько секунд. Откровенно говоря, очень медленно. Тормозит конструкция ExcelWsh.Cells(...) . Можно ли как-нибудь по-другому заполнять Excel'евский лист?

Помогите, а то уже на ум приходит конструкция "сохранить все данные в текстовый файл, загрузить в Excel, а потом навести марафет" (все это программно, конечно) :(
...
Рейтинг: 0 / 0
29.12.2004, 18:06
    #32850451
Dats
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
sraider
Код: plaintext
1.
2.
3.
4.
Do Until ...
  ...
  ExcelWsh.Cells(I, J).Value = Значение
Loop

Но! Работает это очень-очень медлено. Над тысячей значений призадумывается несколько секунд. Откровенно говоря, очень медленно. Тормозит конструкция ExcelWsh.Cells(...) . Можно ли как-нибудь по-другому заполнять Excel'евский лист?



Быстрее только если не на VBA, а на макросах. В смысле
Добавить лист-> Лист макросов MS Exel 4.0
И там переписать твою процедуру.
Ну или комп проапгрейдить :-)
Иначе никак.
...
Рейтинг: 0 / 0
29.12.2004, 18:15
    #32850468
sraider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
DatsБыстрее только если не на VBA, а на макросах. В смысле
Добавить лист-> Лист макросов MS Exel 4.0
И там переписать твою процедуру.
Ну или комп проапгрейдить :-)
Иначе никак.

Ну может быть можно как-нибудь целыми диапазонами (Range) данные загружать?...

Комп P4 2Ghz 256Mb :(
...
Рейтинг: 0 / 0
29.12.2004, 20:40
    #32850590
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Код: plaintext
1.
2.
3.
4.
' вот тут сам процесс
Do Until ...
  ...
  ExcelWsh.Cells(I, J).Value = 
Loop
Самое интересное осталось недосказанным: Значение
Если оно в цикле извлекается, то из чего?
Это я к тому, что Excel заполняет диапазон из массива одной строкой...
...
Рейтинг: 0 / 0
30.12.2004, 10:01
    #32850915
MX-ALEX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
sraiderЗаполняю Excel'овскую таблицу так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set ExcelApp = CreateObject("Excel.Application")
Set ExcelWbk = ExcelApp.Workbooks.Add()
Set ExcelWsh = ExcelWbk.Worksheets( 1 )
...

' вот тут сам процесс
Do Until ...
  ...
  ExcelWsh.Cells(I, J).Value = Значение
Loop
:(
Лучше создать сначала двумерный массив
dim m2(1:999, 1:99)
и запихнуть в него значения
Затем -
ExcelWsh.range(ExcelWsh.Cells(1, 1),ExcelWsh.Cells(999, 99)).Value = m2
...
Рейтинг: 0 / 0
30.12.2004, 14:36
    #32851605
sraider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Processor
Код: plaintext
1.
2.
3.
4.
' вот тут сам процесс
Do Until ...
  ...
  ExcelWsh.Cells(I, J).Value = 
Loop
Самое интересное осталось недосказанным: Значение
Если оно в цикле извлекается, то из чего?
Это я к тому, что Excel заполняет диапазон из массива одной строкой...

Извлекается из полей базы данных (объекта Recordset). Тип значения как правило либо строка, либо число (с пл.точкой)
...
Рейтинг: 0 / 0
30.12.2004, 14:43
    #32851629
sraider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
MX-ALEXЛучше создать сначала двумерный массив
dim m2(1:999, 1:99)
и запихнуть в него значения
Затем -
ExcelWsh.range(ExcelWsh.Cells(1, 1),ExcelWsh.Cells(999, 99)).Value = m2

о! такая конструкций работает! попробую через нее...
...
Рейтинг: 0 / 0
30.12.2004, 14:50
    #32851640
sraider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
MX-ALEXЛучше создать сначала двумерный массив
dim m2(1:999, 1:99)
и запихнуть в него значения
Затем -
ExcelWsh.range(ExcelWsh.Cells(1, 1),ExcelWsh.Cells(999, 99)).Value = m2

Работает моментально!!! Спасибо!
...
Рейтинг: 0 / 0
30.12.2004, 20:24
    #32852168
Fuzzy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Если нужно взять на лист данные из рекордсета, то у Range есть прекрасный метод CopyFromRecordset. Рекомендую.
...
Рейтинг: 0 / 0
30.12.2004, 20:24
    #32852170
Fuzzy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Если нужно взять на лист данные из рекордсета, то у Range есть прекрасный метод CopyFromRecordset. Рекомендую.
...
Рейтинг: 0 / 0
04.01.2005, 21:37
    #32853903
SinnerXP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
Либо исполльзовать QueryTables ...


' функция выгрузки диапазона данных на лист Excel
Public Sub GetSQLData(stSQL As String, stBookName As String, stSheetName As String, stRangeName As String, stCellName As String, stQueryName As String)
Dim RS As New ADODB.Recordset

' открытие запроса
OpenConnection (Null)
Set COM = New ADODB.Command
COM.ActiveConnection = CON
COM.CommandText = stSQL
COM.CommandTimeout = 0
Set RS = COM.Execute
' добавление самого запроса
Workbooks(stBookName).Sheets(stSheetName).Range(stRangeName).ClearContents
With Workbooks(stBookName).Sheets(stSheetName).QueryTables.Add(RS, Sheets(stSheetName).Range(stCellName))
.Name = stQueryName
.RefreshStyle = xlInsertEntireRows
.BackgroundQuery = False
.Refresh
End With
RS.Close

End Sub
...
Рейтинг: 0 / 0
05.01.2005, 12:02
    #32854231
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение листа в Excel
sraiderИзвлекается из полей базы данных (объекта Recordset). Тип значения как правило либо строка, либо число (с пл.точкой) Fuzzyу Range есть прекрасный метод CopyFromRecordset. РекомендуюПрисоединяюсь к чёткой рекомендации Fuzzy ;-)))
Уточняю только: этот метод работает с ADO Recordset, начиная с версии Excel 2000.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Заполнение листа в Excel / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]