Страница 1 из 2

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

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

Использую C5.5 и ExcelClass (abxl)

Добавлено: 02 Июнь 2006, 0:04
Игорь Столяров
Если речь идет о записи (экспорте) в MS Excel - можно записывать несколько ячеек (обычно - строку) в ClipBoard, а в Excel выполнять специальную вставку из ClipBoard с указанного места.
Это в несколько раз быстрей чем, чем прямая запись ячеек ...

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

а других способов ускорения нет?

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

Но конечно наиболее эффективно использовать Excel - как средство отображения готового отчета, т.е. формировать отчет в памяти программы и выводить готовый лист по строкам (см. выше), а не формировать его прорисовкой произвольных ячеек.
Посмотрел - отчет в 8 тыс. строк * 10 колонок выводится за 30 сек.
Ускорять далее - не пробовал ...

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

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

Добавлено: 02 Июнь 2006, 12:50
AnDS
А обратно как включить?

(Вроде побыстрее стало с выключенным расчетом формул)

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

Или что-то другое имеется ввиду?

Добавлено: 02 Июнь 2006, 12:52
Игорь Столяров
?ExcelObj{'Application.Calculation'} = -4105 ! Включить расчет формул
:)

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

Или что-то другое имеется ввиду?
Нет, именно это... Значит, не судьба. Пользуйся Formula One... Кстати, в Офис входят так называемые Web-компоненты - OCX, работающие с таблицами. Хоть бы кто поковырялся :(

Добавлено: 02 Июнь 2006, 13:46
Игорь Столяров
> так называемые Web-компоненты - OCX

Напс ? Чтобы получить зависимость прикладной программы от версии MS Office ? ;) Мне вполне хватает разхождений между MSO 2003 - XP ... ;)

Добавлено: 02 Июнь 2006, 14:47
Igor Vesnin
Ну собственно рекомендаций несколько:
Как советовали ранее
1. Скрыть Ole (для исключения перерисовки)
2. Отключить вычисления формул (для исключения постоянного перерасчета)
Кроме того можно:
3. Заполнять с последней строки (для исключения постоянного запроса в систему на выделение памяти)
4. Использовать бланки (чтобы не выполнять лишние операции в виде выравнивания, границы и т.д.)
5. Если отчет простой (таблица), то использовать класс Олега Руденко.
6. Ну и как советовал Юрий, если не получится, то использовать Formula One. Загружается быстрее, ну и вообщем-то другие свои преимущества, как и недостатки.

Добавлено: 02 Июнь 2006, 14:54
Игорь Столяров
Ну если скорость - это самоцель, тогда лучше писать CSV или DBF (мало чем отличается от заполнения Excel по ячейкам) и открывать его в Excel. И потом уже дорисовывать, раскрашивать и выравнивать.

Добавлено: 02 Июнь 2006, 15:07
Yufil
Игорь Столяров писал(а):> так называемые Web-компоненты - OCX

Напс ? Чтобы получить зависимость прикладной программы от версии MS Office ? ;) Мне вполне хватает разхождений между MSO 2003 - XP ... ;)
А нафиг... Кинул OCX под ноги программе - и таскай. И никакой зависимости. Так же, как и F1.

Добавлено: 04 Июнь 2006, 11:50
Ravenous
Отключить обновление экрана(перерисовку) можно
?ExcelObj{'Application.ScreenUpdating'} = False
Включить соответственно = True

Добавлено: 05 Июнь 2006, 8:35
MIXA-20
Простите. Немного не по теме. Проблема перехода с С5.5 на с6.0 и далее.
Работает ли ExcelClass (abxl) в С6.0 - С6.3 ?
М.б. лучше EasyExcel ?