Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - <NOOB> WordPlugin Dokument öffnen


Kleine Rosi - Di 23.01.07 09:29
Titel: <NOOB> WordPlugin Dokument öffnen
Hallo,

bin ein Delphi-Noob (habe vorher VB gemacht)

Ich habe hier ein Problem mit einem Addin für Word.

Ich habe ein Addin für Word erstellt, mit dem man über eine Schaltfläche in der Word-Menueleiste einen Dialog startet, wo man bestimmte Kunden aus der DB auswählt und den zu erstellenden Bericht/Fax/ etc.

Dazu gibt es diverse Word-Templates, die je nach Kunde ausgewählt werden.

So weit so gut.

Jetzt ist es aber so, daß jetzt ein neues Word geöffnet wird, was schlecht ist, da das Delphi-Fenster jetzt ja nicht mehr modal ist...

Vermutlich liegt es irgendwie an dem

WordApplication1.Connect;
WordApplication1.Documents.AddOld(NewFile,EmptyParam);

wie kann ich das anders machen, daß in der aktuellen Instanz von Word ein neues Dokument (mit der angegebenen Vorlage) gemacht wird. Das alte Dok schliessen evtl?


mein Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button2Click(Sender: TObject);    //Übernehme Daten in Dokument
var NewFile  : OleVariant;
 vWhat, vBookmark:OleVariant;
 i:integer;
 f:TField;
begin
  NewFile:='C:\addintest\'+vorlage+'.dot';
  WordApplication1.Connect;
  WordApplication1.Documents.AddOld(NewFile,EmptyParam);  
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
  WordApplication1.Visible:=true;

  for i:=0 to Query1.Fields.Count-1 do
  begin
    f:= Query1.Fields.Fields[i];
    vWhat:=wdGoToBookmark;
    vBookmark:=f.FieldName;
    if WordDocument1.Bookmarks.Exists(f.FieldName) then
    begin
      WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark);
      WordApplication1.Selection.TypeText(Query1.fieldByname(f.FieldName).AsString);
    end;
  end;
  WordApplication1.Disconnect;

end;


Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt

oh, Danke ;-)

Achso, was mir gerade noch eingefallen ist, gibt es eine Methode, den Print-Preview im Delphi-Fenster und nicht den von Word anzuzeigen? Ich hab dazu nix gefunden


Keldorn - Di 23.01.07 19:56
Titel: Re: <NOOB> WordPlugin Dokument öffnen
user profile iconKleine Rosi hat folgendes geschrieben:

wie kann ich das anders machen, daß in der aktuellen Instanz von Word ein neues Dokument (mit der angegebenen Vorlage) gemacht wird. Das alte Dok schliessen evtl?

kontollier mal, auf was connectkind deiner wordapplication steht (ckRunningOrNew) sollte es sein

user profile iconKleine Rosi hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button2Click(Sender: TObject);    //Übernehme Daten in Dokument
var NewFile  : OleVariant;
 vWhat, vBookmark:OleVariant;
 i:integer;
 f:TField;
begin
  NewFile:='C:\addintest\'+vorlage+'.dot';
  WordApplication1.Connect;
  WordApplication1.Documents.AddOld(NewFile,EmptyParam);  
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
  WordApplication1.Visible:=true;

  for i:=0 to Query1.Fields.Count-1 do
  begin
    f:= Query1.Fields.Fields[i];
    vWhat:=wdGoToBookmark;
    vBookmark:=f.FieldName;
    if WordDocument1.Bookmarks.Exists(f.FieldName) then
    begin
      WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark);
      WordApplication1.Selection.TypeText(Query1.fieldByname(f.FieldName).AsString);
    end;
  end;
  WordApplication1.Disconnect;

end;

du hast zwar eine Vorlage, überleg dir trotzdem mal, ob du nicht evtl besser kommst, du löst das über einen Serienbrief und verknüpfst den mit deiner Datenquelle. Zumindestens das erstellen ginge so viel einfacher, da du die "Felder" im Word bequem auswählen kannst und nicht textmarken manuell erstellen mußt.

user profile iconKleine Rosi hat folgendes geschrieben:
Achso, was mir gerade noch eingefallen ist, gibt es eine Methode, den Print-Preview im Delphi-Fenster und nicht den von Word anzuzeigen? Ich hab dazu nix gefunden

olecontainer, aber dann ist das "komplette" word dort drin.

Mfg Frank