Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi WORD mergefield via OLE ersetzen. Aber wie ? (https://www.delphipraxis.net/6776-word-mergefield-via-ole-ersetzen-aber-wie.html)

JoelH 22. Jul 2003 10:32


WORD mergefield via OLE ersetzen. Aber wie ?
 
Ich hab es so probiert
http://www.delphipraxis.net/internal...rd+application

also mein Code sieht dann so aus :
Delphi-Quellcode:
Procedure WordOeffnen(datei: string);
var oV_Word : OleVariant;
     wnd_Word : hwnd;
    s_WndName: string;
    i       : integer;
    b_suchen : boolean;
begin
  { Word schon geöffnet ? }
  //oV_Word := CreateOleObject('Word.Basic');
  oV_Word := CreateOleObject('Word.Application');
  s_WndName:='Microsoft Word - ';
  b_suchen:=true;
  i:=Length(datei);
  while (i>1) and b_suchen do
    if datei[i]='\'
      then b_suchen:=false
      else Dec(i);
  if not b_suchen then s_WndName:=s_WndName+Copy(datei, i+1, Length(datei)-i);
  wnd_Word:=FindWindowEx(0, 0, 'OpusApp', PChar(s_WndName));
  if wnd_Word = 0
    then begin
    {
      oV_Word.AppMaximize;
      ov_Word.AppShow;
      oV_Word.FileOpen(datei);
    }
    ov_Word.visible := true;
    ov_word.activate;
    ov_word.documents.open(datei);
    //ov_Word.run('AutoNew.MAIN');
    ov_word.ActiveDocument.FormFields.Item('MANDANT').Result:='Test';
    end
    else begin
      SetForeGroundWindow(wnd_Word);
      if IsIconic(wnd_Word) then OpenIcon(wnd_Word);
         end;
end;
wichtig sind die Zeilen
Delphi-Quellcode:
ov_Word.visible := true;
    ov_word.activate;
    ov_word.documents.open(datei);
    //ov_Word.run('AutoNew.MAIN');
    ov_word.ActiveDocument.FormFields.Item('MANDANT').Result:='Test';
Leider meint er dass die letzte Zeile nicht geht, der Fehler ist
Zitat:

Das Angeforderte Element ist nicht in der Sammlung vorhanden
Was für ein Element ist nicht in welcher Sammlung vorhanden frag ich mich da ?

Die Vorlage ist ein .DOT File welches über ein VB Makro betrieben wird. Ich möchte das ganze Makro aber rauswerfen und Delphi die Arbeit erledigen lassen !

Das Feld MANDANT ist vorhanden, es ist von Typ Mergefield.

JoelH 22. Jul 2003 11:39

hmm,
 
ich hab es geschafft :)

Delphi-Quellcode:
i := 0;
      while (i < length(feldliste)) do
      begin
        if (ov_word.existingBookmark(feldliste[i].feldname) = -1) then
        begin
          ov_word.WW7_EditGoTo(feldliste[i].feldname);
          ov_word.Insert(feldliste[i].feldvalue);
        end;
        inc(i);
      end;
so geht es mit Delphi4/Word2000.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz