Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизВопрос по 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c