Ускорение работы с Excel через OLE?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
AnDS
Активист
Сообщения: 119
Зарегистрирован: 03 Ноябрь 2005, 9:32

Ускорение работы с Excel через OLE?

Сообщение AnDS »

Как бы ускорить работу с OLE?
На мой взгляд все работает очень медленно.
(Копирую блок ячеек, затем заполняю ячейки по координатам значениями)

Использую C5.5 и ExcelClass (abxl)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Сообщение Игорь Столяров »

Если речь идет о записи (экспорте) в MS Excel - можно записывать несколько ячеек (обычно - строку) в ClipBoard, а в Excel выполнять специальную вставку из ClipBoard с указанного места.
Это в несколько раз быстрей чем, чем прямая запись ячеек ...
За теми кто отстал - не возвращаться. (С) Кодекс
AnDS
Активист
Сообщения: 119
Зарегистрирован: 03 Ноябрь 2005, 9:32

Сообщение AnDS »

К сожалению, я заранее не знаю в какой последовательности будут заполняться ячейки. :-(

а других способов ускорения нет?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Сообщение Игорь Столяров »

Ну, попробуй тогда обычные методы:
1. Переход на более новую версию (Ex2003 незначительно, но быстрей чем XP);
2. Отключи сразу, перед записью листа, расчет формул на нем.
?ExcelObj{'Application.Calculation'} = -4135

Но конечно наиболее эффективно использовать Excel - как средство отображения готового отчета, т.е. формировать отчет в памяти программы и выводить готовый лист по строкам (см. выше), а не формировать его прорисовкой произвольных ячеек.
Посмотрел - отчет в 8 тыс. строк * 10 колонок выводится за 30 сек.
Ускорять далее - не пробовал ...
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Сообщение Yufil »

Игорь Столяров писал(а):Ну, попробуй тогда обычные методы:
1. Переход на более новую версию (Ex2003 незначительно, но быстрей чем XP);
2. Отключи сразу, перед записью листа, расчет формул на нем.
?ExcelObj{'Application.Calculation'} = -4135

Но конечно наиболее эффективно использовать Excel - как средство отображения готового отчета, т.е. формировать отчет в памяти программы и выводить готовый лист по строкам (см. выше), а не формировать его прорисовкой произвольных ячеек.
Посмотрел - отчет в 8 тыс. строк * 10 колонок выводится за 30 сек.
Ускорять далее - не пробовал ...
Попробуй просто скрыть OLE перед заполнением, тогда нет соблазна перерисовывать картинку после каждой строчки. Был у меня такой эпизод, как говорят буржуи "dramatically increased" ... А после заполнения можно и открыть.
AnDS
Активист
Сообщения: 119
Зарегистрирован: 03 Ноябрь 2005, 9:32

Сообщение AnDS »

А обратно как включить?

(Вроде побыстрее стало с выключенным расчетом формул)
AnDS
Активист
Сообщения: 119
Зарегистрирован: 03 Ноябрь 2005, 9:32

Сообщение AnDS »

Ну, у меня OLE скрыт (hide).
И Excel скрыт (visible только после завершения создания отчета делаю).

Или что-то другое имеется ввиду?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Сообщение Игорь Столяров »

?ExcelObj{'Application.Calculation'} = -4105 ! Включить расчет формул
:)
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Сообщение Yufil »

AnDS писал(а):Ну, у меня OLE скрыт (hide).
И Excel скрыт (visible только после завершения создания отчета делаю).

Или что-то другое имеется ввиду?
Нет, именно это... Значит, не судьба. Пользуйся Formula One... Кстати, в Офис входят так называемые Web-компоненты - OCX, работающие с таблицами. Хоть бы кто поковырялся :(
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Сообщение Игорь Столяров »

> так называемые Web-компоненты - OCX

Напс ? Чтобы получить зависимость прикладной программы от версии MS Office ? ;) Мне вполне хватает разхождений между MSO 2003 - XP ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Igor Vesnin
Посетитель
Сообщения: 49
Зарегистрирован: 30 Декабрь 2005, 0:06

Сообщение Igor Vesnin »

Ну собственно рекомендаций несколько:
Как советовали ранее
1. Скрыть Ole (для исключения перерисовки)
2. Отключить вычисления формул (для исключения постоянного перерасчета)
Кроме того можно:
3. Заполнять с последней строки (для исключения постоянного запроса в систему на выделение памяти)
4. Использовать бланки (чтобы не выполнять лишние операции в виде выравнивания, границы и т.д.)
5. Если отчет простой (таблица), то использовать класс Олега Руденко.
6. Ну и как советовал Юрий, если не получится, то использовать Formula One. Загружается быстрее, ну и вообщем-то другие свои преимущества, как и недостатки.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Сообщение Игорь Столяров »

Ну если скорость - это самоцель, тогда лучше писать CSV или DBF (мало чем отличается от заполнения Excel по ячейкам) и открывать его в Excel. И потом уже дорисовывать, раскрашивать и выравнивать.
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Сообщение Yufil »

Игорь Столяров писал(а):> так называемые Web-компоненты - OCX

Напс ? Чтобы получить зависимость прикладной программы от версии MS Office ? ;) Мне вполне хватает разхождений между MSO 2003 - XP ... ;)
А нафиг... Кинул OCX под ноги программе - и таскай. И никакой зависимости. Так же, как и F1.
Аватара пользователя
Ravenous
Бывалый
Сообщения: 56
Зарегистрирован: 06 Июль 2005, 14:25
Откуда: Москва

Сообщение Ravenous »

Отключить обновление экрана(перерисовку) можно
?ExcelObj{'Application.ScreenUpdating'} = False
Включить соответственно = True
Благодарень за терпение и понимание.

Изображение
MIXA-20

Сообщение MIXA-20 »

Простите. Немного не по теме. Проблема перехода с С5.5 на с6.0 и далее.
Работает ли ExcelClass (abxl) в С6.0 - С6.3 ?
М.б. лучше EasyExcel ?
Ответить