Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.03.22;
Скачать: [xml.tar.bz2];

Вниз

MS Office Excel 2010 (про позднее связывание)   Найти похожие ветки 

 
ТимоховДА   (2014-07-30 19:21) [0]

Приветствую!

1. Есть моя программа. Работает по позднему связыванию с Excel. Использую имя приложения Excel.Application, т.е. использую т.н. VersionIndependentProgID.

2. Проблема в том, что при переходе к ML Office Excel 2010 обращение к Excel (как получение значений, так и изменение) стало существенно (иногда в порядок) медленнее.

3. Вопросы.
а. Сталкивался ли кто-то с тем, что позднее связывание работает существенно медленнее для MS Excel 2010 по сравнению с более ранними версиями?
б. Что посоветуете сделать в целях ускорения?

Спасибо!


 
Ega23 ©   (2014-07-30 23:31) [1]

я сейчас под пивом и точно ответить не смогу, но, ЕМНИП, у меня основная просадка была на получении Excel.Range[...]
Если есть возможность получить "сразу всё" в некий VarArray - лучше получить, а уж потом разбираться с ним.
Вроде так.


 
Rouse__   (2014-07-31 00:13) [2]

Я тоже слегка под Коньячком, но если память мне не изменяет, была у нас такая проблема на экспорте данных в офис, а лечилась просто - добавлением приложения в исключения антивируса (правда что за антивирус - уже не помню, давно было)


 
тимоховда   (2014-07-31 01:14) [3]

Алкаши блин)))))
Я вот трезв как стеклышка)
Ик)

Спасибо. Завтра проверю про range. У меня у самого сложилось ощущение, что антивирь гадит.

На крайняк - раннее связывание пробовать буду. Может, оно поможет.

Вечером уже добил тест. Ровно в 10 раз просадка.


 
short circuit   (2014-07-31 02:32) [4]

можно еще попробовать:
1) Excel.ScreenUpdating := False;  Excel.WindowState := xlMinimized; Excel.Visible:=True;
2) или наоборот НЕ делать Excel.Visible:=True;


 
Ega23 ©   (2014-07-31 10:15) [5]


>  или наоборот НЕ делать Excel.Visible:=True;


Это как бы вообще само-собой, даже не обсуждается.


 
junglecat   (2014-07-31 10:30) [6]

> раннее связывание пробовать буду. Может, оно поможет

вряд ли оно сильно ускорит. Затраты на связывание слишком малы по сравнению с собственно обменом данными


 
имя   (2014-07-31 11:26) [7]

Удалено модератором


 
имя   (2014-07-31 11:33) [8]

Удалено модератором


 
имя   (2014-07-31 11:34) [9]

Удалено модератором


 
имя   (2014-07-31 11:55) [10]

Удалено модератором


 
имя   (2014-07-31 11:59) [11]

Удалено модератором


 
имя   (2014-07-31 12:00) [12]

Удалено модератором


 
имя   (2014-07-31 12:02) [13]

Удалено модератором


 
имя   (2014-07-31 12:03) [14]

Удалено модератором


 
имя   (2014-07-31 12:05) [15]

Удалено модератором


 
ТимоховД   (2014-07-31 14:15) [16]


> junglecat   (31.07.14 10:30) [6]
> > раннее связывание пробовать буду. Может, оно поможет
>
> вряд ли оно сильно ускорит. Затраты на связывание слишком
> малы по сравнению с собственно обменом данными


Я все же попробую - ничего не остается. Последняя надежда.
Вообще удивительно, конечно - в 10 раз медленнее, это уже чересчур.

2 _Rouse: атривирь убрал вообще. Эффекта нет(((


> short circuit   (31.07.14 02:32) [4]
> можно еще попробовать:
> 1) Excel.ScreenUpdating := False;  Excel.WindowState :=
> xlMinimized; Excel.Visible:=True;
> 2) или наоборот НЕ делать Excel.Visible:=True;


Это само собой.

fApp := CreateOleObject("Excel.Application.14");
     fApp.Visible := False;
     fApp.Interactive := False;
     fApp.DisplayAlerts := False;
     fApp.ScreenUpdating := False;
     fApp.SheetsInNewWorkbook := 1;


 
sniknik ©   (2014-07-31 15:51) [17]

> Это само собой.
+
fApp.Application.EnableEvents:= false;


 
ТимоховД   (2014-07-31 16:07) [18]

Докладываю. Повозиться пришлось с ранним связыванием. Но работает на 2 порядка быстрее. Т.е. в 1 порядок быстрее, чем на позднем связывании на старом екселе работало и на 2 порядка, чем на позднем связывании на Office 2010.

Копаю дальше. Феномен какой-то.


 
ТимоховД   (2014-07-31 16:07) [19]

Докладываю. Повозиться пришлось с ранним связыванием. Но работает на 2 порядка быстрее. Т.е. в 1 порядок быстрее, чем на позднем связывании на старом екселе работало и на 2 порядка, чем на позднем связывании на Office 2010.

Копаю дальше. Феномен какой-то.


 
ТимоховД   (2014-07-31 16:17) [20]


> sniknik ©   (31.07.14 15:51) [17]
> > Это само собой.
> +
> fApp.Application.EnableEvents:= false;


Эх, а таааак хотелось - одно свойство в false и все проблемы решены :)
Нет. К сожалению не помогло. В общем, буду переписывать под раннее связывание. Все остальное не помогает :(((

ЗЫ Ребята-модераторы. Прошу извинить за дубляж и трояж. Сам не пойму, почему.


 
ТимоховД   (2014-07-31 16:17) [21]


> sniknik ©   (31.07.14 15:51) [17]
> > Это само собой.
> +
> fApp.Application.EnableEvents:= false;


Эх, а таааак хотелось - одно свойство в false и все проблемы решены :)
Нет. К сожалению не помогло. В общем, буду переписывать под раннее связывание. Все остальное не помогает :(((

ЗЫ Ребята-модераторы. Прошу извинить за дубляж и трояж. Сам не пойму, почему.


 
junglecat   (2014-07-31 17:03) [22]

> Но работает на 2 порядка быстрее

Какой вид привязывания следует использовать?

Ответ на этот вопрос зависит только от особенностей проекта. Корпорация Майкрософт рекомендует практически всегда использовать ранее привязывание. Однако могут существовать причины для использования позднего привязывания.

Ранее привязывание является предпочтительным способом. Она является наилучшим вариантом с точки зрения производительности, поскольку приложение выполняет привязку непосредственно к адресу вызываемой функции, и поэтому отсутствует дополнительная нагрузка при подстановке во время выполнения. Что касается общей скорости выполнения, она почти в два раза выше, чем при использовании позднего привязывания.

(с) http://support.microsoft.com/kb/245115


 
short circuit   (2014-08-01 02:02) [23]

>> 2) или наоборот НЕ делать Excel.Visible:=True;

Ega23> Это как бы вообще само-собой, даже не обсуждается.

> Это само собой.
>     fApp.Visible := False;
> Эх, а таааак хотелось - одно свойство в false и все проблемы решены :)

ну так вот у вас все само собой и не обсуждается, а у меня именно вариант с VISIBLE+minimized с какой-то версией ёкселя ускорение давал:
>> 1) Excel.ScreenUpdating := False;  Excel.WindowState := xlMinimized; Excel.Visible:=True;


 
ТимоховДА   (2014-08-07 18:55) [24]

Докладываю.

В общем проблема не в раннем-позднем связывании.

В итоге оказалось, что конкретно этот 31мегабайтный файл xlsx (третья сторона создает его) был создан в Excel2007. Все само залетало (как раз те 2 порядка), когда я пересохранил файл в Excel2010.

При этом мои личные попытки создать большой файл xlsx на Excel2007, а потом попытаться увидеть проблему на Excel2010 не увенчались успехом. На Excel2010 с одинаковой скоростью работают как файл, исходно созданный в Excel2007, так и файл, созданный в Excel2007, но пересохраненный в Excel2010.

Правда, я не использовал в своем тесте обширное форматирование, автофильтр, ссылки на другие ячейки.

Но вывод простой: увидел непонятки в работе с файлом xlsx, созданным в Excel2007, первым дело пересохрани его в Excel2010.

Прошу извинить, что поднял тут тему. Поспешил изначально.

ЗЫ Ща попробую автофильтр и прочие прибамбасы. Если все замедление проявится, то имхо - полноценная инфа в support.microsoft.com/kb.


 
Rouse_ ©   (2014-08-07 19:06) [25]

Дим, а тестик выложи с оригинальным файлом - хочется глянуть.


 
Пит   (2014-08-07 20:10) [26]

То есть, ты позднее связывание проверил на "глючком" файлике, а раннее связывание на другом нормальном файле? ))

Ты нарушил первое правило тестирования )



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.002 c
15-1407155744
С-К
2014-08-04 16:35
2015.03.22
TComboBox и LoadFromStream/SaveToStream


6-1272020056
bwwebm
2010-04-23 14:54
2015.03.22
Аналог recv() / Обход recv() / Прямое чтение всего буфера сокета


15-1406733714
ТимоховДА
2014-07-30 19:21
2015.03.22
MS Office Excel 2010 (про позднее связывание)


3-1303464880
worldmen
2011-04-22 13:34
2015.03.22
TDBGridEh визуальная группировка.


15-1407570953
alexdn
2014-08-09 11:55
2015.03.22
Удалить программу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский