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); 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
Gausi: 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
Kleine 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
Kleine 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); 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.
Kleine 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