Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: CL | DM;

Вниз

Вопрос по Excell   Найти похожие ветки 

 
YurikGl ©   (2004-03-01 19:42) [0]

Пока есть люди разбирающиеся в Excell, задам вопрос.
Как изменить в Excell ориентацию листа на альбомный?
Проблема в том, что у меня Delphi "не видит" свойства объекта WorkSheet и т.п. (напр.ActiveSheet) через который это делает VBA.


 
jack128 ©   (2004-03-01 19:48) [1]


> Проблема в том, что у меня Delphi "не видит" свойства объекта
> WorkSheet
Я так понимаю, имеется в виду TExcelApplication и ежи с ними?
Используй позднее связование..


 
YurikGl ©   (2004-03-01 19:54) [2]

E1: TExcelApplication;

Вот код
E1.Connect;
E1.Visible[0]:=true;
E1.Workbooks.Add(Null,1);

VBA дает
ActiveSheet.PageSetup.Orientation = xlLandscape

Но свойства PageSetup у ActiveSheet нет. У него вообще почти свойств нет. Только GetTypeInfo и т.п.

Думаешь поздним связыванием это решится?

З.Ы. Если есть под рукой, можно примерчик. pls


 
jack128 ©   (2004-03-01 19:57) [3]

Конечно решишь..
Заодно избавишься от
> E1.Visible [0]:=true;
> E1.Workbooks.Add (Null,1);
которые в падавляющем большенстве случаев не нужны..


 
YurikGl ©   (2004-03-01 20:36) [4]

Хм... если использовать сервер excelapplication а не
XL := CreateOleObject("Excel.Application");
WB := XL.Workbooks.Add;
WS := WB.WorkSheets.Add;

То данные добавляются раз в 10 быстрее...
Но нет доступа к ActiveSheet.PageSetup.Orientation = xlLandscape


 
jack128 ©   (2004-03-01 20:43) [5]


> Хм... если использовать сервер excelapplication а не
> XL := CreateOleObject("Excel.Application"
> То данные добавляются раз в 10 быстрее...

Эксперементов не проводил, но вполне естественно, что ранне связование быстрее позднего. Это плата за определенную независимость от версии Ole сервера


 
YurikGl ©   (2004-03-01 20:45) [6]

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


 
jack128 ©   (2004-03-01 20:57) [7]

Что типа этого?
var
XL: OleVariant;
begin
XL := OleVariant(ExcelApplication1.Application);
XL.ActiveSheet.PageSetup.Orientation = xlLandscape;


 
YurikGl ©   (2004-03-01 21:14) [8]

Фишка не прошла

xl:=CreateOleObject("Excel.Application");
WB := xl.Workbooks.Add;
WS := WB.WorkSheets.Add;
xl.Visible := True;

E1.Connect;
....
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[3].value;

Если с Excel есть связывание через xl:=CreateOleObject("Excel.Application"); то при добавлении даже через ExcelApplication прога тормозит.


 
YurikGl ©   (2004-03-01 21:18) [9]

В связи с этим возникает вопрос: можно ли связаться через xl:=CreateOleObject("Excel.Application") с уже работающим екселем или как-то "отвязаться"?


 
jack128 ©   (2004-03-01 21:27) [10]


> Если с Excel есть связывание через xl:=CreateOleObject("Excel.Application");
> то при добавлении даже через ExcelApplication прога тормозит.
Что тут не так. Поздне связование "тормазит" потому что ри его использовании вызывается GetIDsOfNames и Invoke, а при раннем связовании напрямую вызываются методы интерфейсов... Даже не знаю, что сказать.

Попробуй так > jack128 © (01.03.04 20:57) [7] , но это уже шаманство...


 
YurikGl ©   (2004-03-01 21:34) [11]

Приведу другой код
E1:TExcelApplication;

xl:=CreateOleObject("Excel.Application");
E1.Connect;
E1.Visible[0]:=true;
E1.Workbooks.Add(Null,1);
....
здесь всякое добавление данных, форматирование через E1.

Этот код тормозит.
Если закомментировать строку xl:=CreateOleObject("Excel.Application");, то E1 сам запустит Excel и тормоза пройдут.



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

Текущий архив: 2004.03.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
3-43363
AZ
2004-02-12 16:02
2004.03.14
Доступ к защищенной БД


3-43344
Rumba
2004-02-16 16:36
2004.03.14
FIBPlus 5.08 master-detail


1-43513
Chapha
2004-02-28 21:54
2004.03.14
СHM


1-43665
YurikGl
2004-03-01 19:42
2004.03.14
Вопрос по Excell


1-43600
Guest
2004-01-23 13:33
2004.03.14
Высота итемов в TTreeView