Home » Tipps & Tricks » COM/OLE/DDE » Word » Formularfelder in Word ausfüllen

Formularfelder in Word ausfüllen

Ab Delphi 5 Professional gibt es Komponenten, die eine OLE-Verbindung zu Word vereinfachen. Ohne sie muss man unten gezeigten Weg gehen. Im Beispiel wird ein neues Word-Dokument erstellt, das als Vorlage die Datei beispiel.doc hat. Diese enthält Formularfelder mit benannten Textmarken, die mit Daten gefüllt werden.

uses ComObj;

procedure wordformular;
var Word: variant;
begin
  screen.Cursor := crHourglass;
  try
    // Es wird zuerst versucht, eine laufende Word-Instanz zu verwenden
    word := GetActiveOleObject('Word.Application');
  except
    try
      // Läuft Word noch nicht, wird eine neue Verbindung aufgebaut
      Word := CreateOleObject('Word.Application');
    except
      // Schlägt sie fehl (Word nicht installiert), gibt es eine Fehlermeldung
      ShowMessage('Microsoft Word kann nicht starten.');
      screen.cursor := crDefault;
      exit;
    end;
  end;
  word.visible := true;
  Word.Documents.Add(Template:='C:beispiel.doc');
  try
    Word.ActiveDocument.FormFields.Item('Name').Result := 'Hans Müller';
    Word.ActiveDocument.FormFields.Item('Ort').Result := 'Berlin';
  finally
    word := unassigned;
    screen.cursor := crDefault;
  end;
end;

Die Eigenschaft TextInput kann verwendet werden, um einen Vorgabewert zu setzen:

var feld: OleVariant;
begin
  feld := 'Name';
  WordApplication1.ActiveDocument.FormFields.Item(Feld).TextInput.Default :=
    'Name (Vorgabe)';
  WordApplication1.ActiveDocument.FormFields.Item(Feld).result :=
    'Mein Name';
end;

Durch TextInput.Default wird der Vorgabetext des Formularfelds gesetzt, und somit bleibt der Text beim Schützen/Aufheben des Schutzes der Text erhalten. Der FormField.Result zugewiesene Wert ist sonst evtl. nur von kurzer Dauer.