Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Вниз

Connect с WORD!! 


VCL   (2002-01-26 20:10) [0]

Я пытаюсь передать данные в Word. У меня на машине все нормально, у мя W98SE,
Office2000, все прекрасно работает! Hо вот на W95 и Office97 при попытке коннекта
с Word выдается ошибка "Ошибка при выполнении приложения-сервера". Все, даже кода
ошибки и класса я не знаю (у меня не было возможности получить столь необходимую
информацию, т.к. это была не моя тестовая машина без Delphi). Может быть кто-то
уже натыкался на это. Подскажите, пож-ста, в чем дело.

Делаю на Delphi, вот код:

type
TForm1 = class(TForm)
[skipped]
public
WrdApp:Variant;
end;

implementation

{$R *.DFM}

function GetOrCreateObject (const ClassName: string): IDispatch;
var
ClassID: TGUID;
Unknown: IUnknown;
begin
ClassID := ProgIDToClassID(ClassName);
if Succeeded (GetActiveObject(ClassID, nil, Unknown)) then
OleCheck (Unknown.QueryInterface (IDispatch, Result))
else
Result := CreateOleObject (ClassName);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WrdApp:=GetOrCreateObject("Word.Application"); WrdApp.Documents.Add(extra
ctfilepath(application.exename)+"Name",EmptyParam);
WrdApp.Visible := True;
end;

Заранее спасибо!



VCL   (2002-01-28 18:17) [1]

Что, никто не знает???



Artog   (2002-01-28 18:48) [2]

Почему возникает ошибка сказать могу, но как ее решить на вскидку не скажу. Каждый COM объект, а Word это COM объект, имеет свой TGUID. У Word2000 и Word97 они разные. У Word97
TGUID = "{00020905-0000-0000-C000-000000000046}". Этот самый TGUID можно посмотреть, если запустить в реестре на поиск строку
"Word.Application".
Хотя думаю, если присвоить
ClassID := "{00020905-0000-0000-C000-000000000046}" и далее по тексту твоей проги, то будет работать с Word97. Но для Word2000 надо будет делать другое присваивание. Так что надо будет определять какой Word установлен на машине.



Alex2002   (2002-01-31 12:50) [3]

Я пользуюсь компонентами Servers, если их удалить из делфи, а затем импортировать снова через Import Type Library, то можно посмотреть через хинты, какие параметры есть у процедур.
Проще некуда определить и версию Word.

var vers:widestring;


begin
WordApplication1.ConnectKind:=ckNewInstance;//ckAttachToInterface;
WordApplication1.Connect;
vers:=WordApplication1.Version;
if vers="9.0" then
WordApplication1.Documents.Open(Shablon1,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam)
else
WordApplication1.Documents.Openold(Shablon1,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordDocument1.ConnectKind:=ckNewInstance;//ckAttachToInterface;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

WordApplication1.SaveAs(FileName1);
WordDocument1.Close;
WordApplication1.Disconnect;

end.

Если интересно то напиши,есть файлик с подробным описанием, как переинсталить серверные компоненты.

Считается, что такой способ работы быстрее и лучше.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.036 c
3-42656           Anton Shestakov       2002-01-19 02:10  2002.02.14  
Внесение в базу данные2


4-42903           ADM                   2001-12-13 06:52  2002.02.14  
Звук!!!!!


1-42774           Vitek                 2002-01-31 14:15  2002.02.14  
Текстовые компоненты 2


3-42689           ТеньЛуны              2002-01-18 11:40  2002.02.14  
Что такое DataCube?


14-42839          Алексей1              2001-12-21 21:26  2002.02.14  
Текущая дата