powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Заполнение листа в Excel
12 сообщений из 12, страница 1 из 1
Заполнение листа в Excel
    #32850420
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

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

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

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



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

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

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

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

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

Работает моментально!!! Спасибо!
...
Рейтинг: 0 / 0
Заполнение листа в Excel
    #32852168
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно взять на лист данные из рекордсета, то у Range есть прекрасный метод CopyFromRecordset. Рекомендую.
...
Рейтинг: 0 / 0
Заполнение листа в Excel
    #32852170
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно взять на лист данные из рекордсета, то у Range есть прекрасный метод CopyFromRecordset. Рекомендую.
...
Рейтинг: 0 / 0
Заполнение листа в Excel
    #32853903
SinnerXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Либо исполльзовать 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
Заполнение листа в Excel
    #32854231
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sraiderИзвлекается из полей базы данных (объекта Recordset). Тип значения как правило либо строка, либо число (с пл.точкой) Fuzzyу Range есть прекрасный метод CopyFromRecordset. РекомендуюПрисоединяюсь к чёткой рекомендации Fuzzy ;-)))
Уточняю только: этот метод работает с ADO Recordset, начиная с версии Excel 2000.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Заполнение листа в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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