После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
Добрый день! Есть код для вывода данных из Fox Pro в Excel, Через команды:
KK = 1 .Range("A1:Y37").Select .Selection.Copy .Range('A'+allt(str(kk))).Select .ActiveSheet.Paste .WorkSheets(1).HPageBreaks.Add (.Range("A37")) После команды .Selection.Copy, начинает последующие данные из таблицы выводить ОЧЕНЬ медленно! А первые данные выводит быстро, т.к. не копирует выделенную область и не вставляет! Подскажите, что можно сделать!? |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Taran Сообщений: 13624 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Не делать select , а диапазон копировать напрямую.
В деталях не скажу, нет рядом. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Для начала попробовать так:
------------------ Лень - это неосознанная мудрость. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
.Range('A'+ltrim(str(kk))).Paste() - выводится ошибка, прикреплю фаил |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
akvvohinc Автор Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Замените Paste на PasteSpecial.
|
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
Тут суть вопроса вот в чем, у меня по сточно из таблицы выводятся данные, когда первую запись выводит - выводится достаточно быстро
а вот после: .Range("A1:Y37").Copy() .Range('A'+ltrim(str(kk))).Paste() .WorkSheets(1).HPageBreaks.Add (.Range("A37")) данной команды,следующая строка для вывода на печать и последующие начинают медленно выводится в сам excel, я так понимаю после копирования и вставки выделенной области, начинается перезаписывать данные, которые перешли вместе с скопированной области. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
akvvohinc Автор Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Вы считаете, что команды "для вывода на печать и последующие" начинают выполняться ранее того момента, когда завершился процесс вставки? Или я совсем не понял, что какой именно процесс вы считаете "медленным". Предложенные вам команды Copy/Paste должны были ускорить только процедуру копирования/вставки. Всё, что вы делаете после этого, к этому отношения не имеет. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
SCAN
IF kk!=1 .Range("A1:Y37").Copy() .Range('A'+allt(str(kk))).Select .ActiveSheet.Paste parm_str(kk) .Range('R'+allt(str(kk+19))+':'+'Y'+allt(str(kk+36))).Delete(1) parm_line('R','Y',kk+17,kk+36) ENDIF kk=kk+1 DO NewStr with kk,"A",' ',.F.,' ','A-L',' ',' ',2,12,2,.F.,2 EndScan Вот кусочек кода, делаю через скан NewStr - это ссылка на процедуру Исправлено 1 раз(а). Последнее : Sergeynizamov, 21.01.21 14:21 |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
akvvohinc Автор Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
И что нам делать с этим кодом?
Зачем вы вернули .Select? Значения в области A1:Y37 меняются? Зачем их постоянно копировать? Что делают функции parm_str() и parm_line() и процедура NewStr? По-прежнему неясно, что именно делается медленно. 1) Замерьте время работы этого кода. 2) уберите все лишнее, оставив только Copy и Paste и снова замерьте время. В общем изменяя этот код разными способами, вам надо понять, что конкретно тормозит. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
Нашел причину последующего вывода
.WorkSheets(1).HPageBreaks.Add (.Range("A37")) - разрыв страницы. почему сделал такие выводы: если использовать Copy() и Peste(), то выводится довольно быстро Как только добавил разрыв страницы - начинает последующие записи выводить очень медленно. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
akvvohinc Автор Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
А я думаю, что проблема в .Select и ActiveSheet.Paste.
Уберите .Select. Замените .ActiveSheet.Paste на .Range(...).PasteSpecial(). Исправлено 1 раз(а). Последнее : akvvohinc, 22.01.21 23:57 |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
После добавления ручных разрывов страницы эксель начнёт постоянно пересчитывать разбиение на страницы - лучше всё связанное с подготовкой к печати (расстановку ручных разрывов страницы, задание количества страниц куда надо уместить данные, колонтитулы и т.п.) выполнять ПОСЛЕ собственно вывода данных.
Ну и поддержу всех кто говорит что для копирования/вставки .Select и работа с .Selection не нужны. Вообще один из самых быстрых способов заполнения экселевского шаблона из фокса, это использование передачи данных через массив. А для форматирования, если нужно размножить шаблонную "строку" N раз, то лучше сделать это за одну операцию - Эксель умеет сам размножать блоки, даже если исходный блок не 1-строчный. И да, если в "шаблоне строки" нет собственно данных а есть лишь форматирование, то лучше использовать "специальную вставку" и вставлять только "форматирование". Впрочем, как правило такие оптимизации не нужны для более-менее вменяемых отчётов на 1-2-5-10 страниц. Разница между 1 секундой и 5-ю не важна (а чтобы эффективно всё закодировать может понадобится много усилий). Вот для странных людей генерирующих эксели с сотнями тысяч страниц (ещё и распечатывающих их потом) - это уже критически важно. ------------------ WBR, Igor |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Дополню: еще есть формирование файла без использования Excel. Ссылки я тут уже приводил. ------------------ Лень - это неосознанная мудрость. |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
Sergeynizamov Сообщений: 76 Дата регистрации: 21.09.2018 |
ВСЕМ ОГРОМНОЕ СПАСИБО ЗА СОВЕТЫ И ПОМОЩЬ!
Решил проблему по другому: Создал массив, где запоминается номер ячейки для разрыва страницы: и далее в конце всего вывода на печать пробегаю сканом по данному массивы и вставляю разрыв страницы: Примерно так: select tbl1 Go top ScanNom = 0 Scan ScanNom = tbl1.NomerRazr .WorkSheets(1).HPageBreaks.Add (.Range("A+Allt(Str(ScanNom)))) EndScan |
Re: После копирования в книге Excel через команду Copy, следующие данные выводятся ОЧЕНЬ медленно. | |
---|---|
akvvohinc Автор Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Если за строки не платят, то можно сократить
|
© 2000-2024 Fox Club  |