Войти

Показать полную графическую версию : Word+Delphi


Prisoner
08-08-2003, 22:34
Вот скажем нашел я в одном документе все что мне нать, необходимо все это добро вставить в другой документ и сохранить, не закрывая первый (не все добро повыбирали, жадные мы :)). А получается все время вывод в первый док, причем с затиранием всего его содержимого...
Даже такой код творит что-то странное имхо:
WordConnect(dmData.WordApplication);
     FileName:=dmData.odInFile.FileName;
     dmData.WordApplication.Documents.Open(FileName,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam);
      frMain.Caption:=IntToStr(dmData.WordApplication.Documents.Count);
      frMain.Caption:=frMain.Caption+'->'+dmData.WordApplication.Documents.Item(DocIndex).Name;
      dmData.WordApplication.Documents.Add(EmptyParam,NewTemplate,EmptyParam,EmptyParam);
      DocIndex:=DocIndex+1;
      dmData.WordDocument.ConnectTo(dmData.WordApplication.Documents.Item(DocIndex));
      frMain.Caption:=frMain.Caption+'*'+IntToStr(dmData.WordApplication.Documents.Count);
      frMain.Caption:=frMain.Caption+'->'+dmData.WordApplication.Documents.Item(DocIndex).Name;

В результате в кэпшене: 1->Test3.doc*2->Test3.doc хотя существуют два окна ворда с заголовками Test3.doc и Документ2.doc. Что за грабли?

Prisoner
09-08-2003, 20:16
Победил... причем решение лежало на поверхности. Вот скажем так можно без проблем реализовывать работу с документами, причем не задумываясь выводить в тот который нужен:

Скажем откроем доку:

dmData.WordApplication.Documents.Open(FileName,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam);
     dmData.WordDocument.ConnectTo(dmData.WordApplication.ActiveDocument);

Теперь WordDocument будет давать возможность работать с этим открытым доком.

Добавим доку:

procedure NewWordDoc(WordApplication: TWordApplication;WordDocument: TWordDocument);
 Var
   NewTemplate:OleVariant;
 Begin
   NewTemplate:=False;
   WordApplication.Documents.Add(EmptyParam,NewTemplate,EmptyParam,EmptyParam);
   WordDocument.ConnectTo(WordApplication.ActiveDocument);
 End;


Теперь передаем в процедурку любой имеющийся экземпляр TWordDocument и работаем с ним без проблем... воть.




© OSzone.net 2001-2012