Форум: "Corba";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
ВнизПозднее связывание Найти похожие ветки
← →
WebErr © (2004-10-13 13:25) [0]Чем оно лучше раннего связывания?
Я имею в виду ExcelApplication.
← →
Skier © (2004-10-13 13:32) [1]>WebErr © (13.10.04 13:25)
> Чем оно лучше раннего связывания?
Можно писать всё что угодно, бо методы ищутся по имени...
← →
Amoeba © (2004-10-13 13:34) [2]Только тем, что не требуется библиотека типов (компонент является лишь оберткой над ней). А хуже тем, что быстродействие получается очень существенно более низким.
← →
WebErr © (2004-10-13 13:38) [3]А используются, насколько я понял, одинаково.
Только в позднем создание объекта - это CreateOLEObject("ExcelApplication").
В общем, вкратце, в чём существенные отличия при написании кода?
← →
WebErr © (2004-10-13 13:58) [4]Кое-что нашёл на seeYou.narod.ru, кому интересно - выкладываю:
uses comobj; //эта строка должна присутствовать обязательно
procedure TForm1.Button1Click(Sender: TObject);
var
exl: OleVariant;
WorkBook, Sheet: Variant;
fileName: String;
begin
try
//Получаем имя для будующего Excel-файла
fileName:= ExtractFilePath(Application.EXEName)+"Sample1.xls";
//Создаем объект интерфейса для доступа к серверу COM
exl := CreateOleObject("Excel.Application");
//Создаем книгу и обращаемся к первому листу
WorkBook := exl.Application.WorkBooks.Add;
Sheet := WorkBook.WorkSheets[1];
//Записываем в первую ячейку значение "Проба"
Sheet.Cells(1,1) := "Проба";
//Сохраняем полученный файл
exl.Application.ActiveWorkBook.Saveas(fileName);
finally
//Выгружаем сервер из памяти компьютера
exl.Application.Quit;
end;
end;
← →
jack128 © (2004-10-13 14:20) [5]WebErr © (13.10.04 13:38) [3]
в чём существенные отличия при написании кода
тем, что при раннем связовании доступен Code Insight, а при раннем нет. Тем, что при позднем связовании ты можешь указывать только те параметры медов, которые те нужны, а при позднем - обязан указать ВСЕ парамеры(а их может быть ОЧЕНЬ много)
← →
jack128 © (2004-10-13 14:20) [6]jack128 © (13.10.04 14:20) [5]
при раннем связовании доступен Code Insight, а при позднем нет.
← →
KSergey © (2004-10-13 14:31) [7]> [5] jack128 © (13.10.04 14:20)
> при позднем - обязан указать ВСЕ парамеры(а их может быть
> ОЧЕНЬ много)
Это бы пол-беды. Хуже то, что состав параметров может отличаться от версии к версии. Ну либо коннектиться к COM-объекту определенной версии (наверное?). Но тогда к какой?
> [2] Amoeba © (13.10.04 13:34)
> А хуже тем, что быстродействие
> получается очень существенно более низким.
А вот тут...
Не уверен за корректность своих опытов, но у меня плучалось одинаково. С точностью до погрешности измерений.
Может завести ветку и обсудить где я был не прав?
← →
Суслик © (2004-10-13 14:32) [8]
> > [2] Amoeba © (13.10.04 13:34)
> > А хуже тем, что быстродействие
> > получается очень существенно более низким.
я тоже не согласен.
более низкое быстроедействие, но сущесвенным такое замедление назвать нельзя
← →
WebErr © (2004-10-13 14:50) [9]Мне объяснили, что я должен переделать код, где было раннее связывание, на код с поздним для того, чтобы не зависеть от версии Офиса установленного на путере клиента!
Кстати я попробовал следующий код и у меня вылезла CoInitialize error! Почему?
program ProjectOLE;
{$APPTYPE CONSOLE}
uses
SysUtils, ComObj;
var
xl: OleVariant;
begin
xl := CreateOleObject("Excel.Application");
end.
← →
Amoeba © (2004-10-13 14:54) [10]
> у меня вылезла CoInitialize error! Почему?
Потому, что не вызвал CoInitialize в КОНСОЛЬНОМ приложении.
← →
WebErr © (2004-10-13 14:59) [11]Где и как именно его вызывать и зачем оно надо?
← →
WebErr © (2004-10-13 14:59) [12]Где и как именно его вызывать и зачем оно надо?
← →
WebErr © (2004-10-13 15:04) [13]Выражусь точнее: в каком юните его искать, поскольку я понял что для консолного проекта оно иниц-ет COM модель.
← →
WebErr © (2004-10-13 15:14) [14]Бяки вы все. Не сказали бедолаге, что CoInitialize в ActiveX Unit"е.
← →
jack128 © (2004-10-13 15:15) [15]KSergey © (13.10.04 14:31) [7]
Это бы пол-беды. Хуже то, что состав параметров может отличаться от версии к версии. Ну либо коннектиться к COM-объекту определенной версии (наверное?). Но тогда к какой?
ну в офисе есть свойство Version
2 Суслик и KSergey © (13.10.04 14:31) [7]
Не уверен за корректность своих опытов, но у меня плучалось одинаково теоретически - должна быть разница, равная времени вызова GetIDsOfNames.. Да, заведи ветку, я сейчас попробывал - у мя тоже в рамках погрешности разница.. Но я ранним связаванием пользуюсь, ножет накозячел, где нить..
WebErr © (13.10.04 14:59) [12]
ComObj
← →
jack128 © (2004-10-13 15:16) [16]jack128 © (13.10.04 15:15) [15]
Но я ранним связаванием РЕДКО пользуюсь,
← →
WebErr © (2004-10-13 15:19) [17]
> jack128 © (13.10.04 15:15) [15]
Стопудово нет, иначе бы не было undefined identifier CoInitialize
← →
jack128 © (2004-10-13 15:21) [18]WebErr © (13.10.04 15:19) [17]
угу, я имел в виду CoInitializeEx - sorry
← →
WebErr © (2004-10-13 15:32) [19]Accepted
← →
WebErr © (2004-10-13 15:34) [20]Разделите со мной мою радость! 8)
program ProjectOLE;
{$APPTYPE CONSOLE}
uses
SysUtils, ComObj, ActiveX;
var
xl: OleVariant;
begin
CoInitialize(nil);
try
xl := CreateOleObject("Excel.Application");
xl.Visible := true;
xl.WorkBooks.Open("O:\Users\Weber\Projects\OLE\Ïðèìåð.xls");
sleep(5000);
finally
xl.Application.Quit;
end;
end.
Спасибо всем большое, особенно Amoeba! 8)
← →
KSergey © (2004-10-14 08:55) [21]> jack128 © (13.10.04 15:15) [15]
> Это бы пол-беды. Хуже то, что состав параметров может отличаться
> от версии к версии. Ну либо коннектиться к COM-объекту определенной
> версии (наверное?). Но тогда к какой?
> ну в офисе есть свойство Version
Поздно уже ;) Когда подключился - что толку узнать версию? Чтобы сказать "простите, не вышло"? ;)
Вообще под версией я понимал другое: указывать не просто "Excel.Application", а "Excel.Application.10" ну или другую цифирю по вкусу. Хотя. это опять же про позднее связывание. А про раннее... Ну так подозреваю, что например TWord97 подключится к 97 версии (ну или как там она), т.к. в него прошит GUID именно этого COM-сервера. А, если я ничего не путаю, при изменении спецификации COM-сервера ему назначают другой GUID.
> Да, заведи ветку,
Хорошо.
Придумаю состав экспериментов - заведу.
← →
jack128 © (2004-10-14 14:34) [22]KSergey © (14.10.04 8:55) [21]
Когда подключился - что толку узнать версию? Чтобы сказать "простите, не вышло"? ;)
Подключился поздним проверил версию и подключился нужным ранним. Хотя бред, конечно.
> Вообще под версией я понимал другое
я понял. Именно эту цифру и выдает свойство Version
> А, если я ничего не путаю, при изменении спецификации
> COM-сервера ему назначают другой GUID.
да, конечно. Один из основопологающих принципов СОМ
← →
Nurik (2004-10-16 18:46) [23]Вопрос не много не в тему но интересный.
Выполняется следующий код:
ExcelApp := CreateOleObject("Excel.Application");
ExcelApp.WorkBooks.Add(1);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := "Лист";
..............................
pt:=ExcelApp.Workbooks[1].ActiveSheet.PivotTableWizard
(SourceType :=1, SourceData:="Лист!A1:J10",
TableDestination:="", TableName:="сводная1");
pt.AddFields (RowFields:="Region");
pt.PivotFields("Town").Orientation := 4;
pt.PivotFields("Town").Function := 1;
и на последней строчке происходит ошибка. Думаю что слово Funсtion зарезервировано. Как выйти из положения?
Нашел функции OlePropertyGet и OlePropertySet но они не работают.
← →
Nurik (2004-10-16 18:47) [24]Вопрос не много не по теме, но интересный.
Выполняется следующий код:
ExcelApp := CreateOleObject("Excel.Application");
ExcelApp.WorkBooks.Add(1);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := "Лист";
..............................
pt:=ExcelApp.Workbooks[1].ActiveSheet.PivotTableWizard
(SourceType :=1, SourceData:="Лист!A1:J10",
TableDestination:="", TableName:="сводная1");
pt.AddFields (RowFields:="Region");
pt.PivotFields("Town").Orientation := 4;
pt.PivotFields("Town").Function := 1;
и на последней строчке происходит ошибка. Думаю что слово Funсtion зарезервировано. Как выйти из положения?
Нашел функции OlePropertyGet и OlePropertySet но они не работают.
← →
KSergey © (2004-10-18 07:40) [25]> [23] Nurik (16.10.04 18:46)
> и на последней строчке происходит ошибка.
Какая?? Что, постоянно всех переспрашивать надо?
А вообще, боюсь проблема не от резервированности слова. Что-то вы не то делаете.
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.011 c