Главная страница
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.026 c
6-43746
E1
2004-01-09 02:38
2004.03.14
Отвлеченная: Проблема работы ICQ через маскарадинг NATD


3-43249
Belkova
2004-02-13 12:03
2004.03.14
DBGrid


3-43311
nejest
2004-02-10 16:24
2004.03.14
Можно ли обойтись 1 запросом?


4-43958
rustamus
2004-01-06 10:59
2004.03.14
Икона в трее


14-43837
МАКСЮХА
2004-02-22 10:58
2004.03.14
Такие дела...