Wenn man bei Word bleibt, hat man die Möglichkeit Formulare zu nutzen.
Der Kunde liefert eine Vorlage seines "Geschäftsbriefes" (oder was man auch immer haben möchte).
In diese Vorlage werden an den Stellen, wo programmatisch was eingefügt werden soll, Formularefelder platziert. Die kann man dann befüllen.
Delphi-Quellcode:
// FWordDoc sei ein Worddokument, auf das man in Delphi Zugriff hat.
Var
ovAnrede : OleVariant;
sAnrede : String;
...
begin
ovAnrede := 'Anrede';
...
// Irgendwo aus 'ner Datenbank oder dem Formular oder ...
sAnrede := 'Sehr geehrte Damen und Herren,';
...
FWordDoc.FormFields.Item(ovAnrede).Result := sAnrede;
...
In der Wordvorlage muss es nun ein Formularfeld mit dem Namen Anrede geben, dieses wird dann mit der Zeichenfolge 'Sehr geehrte Damen und Herren,' befüllt.
Dann hat man in Word die Möglichkeit, Textmarken zu vergeben. Die sind geeignet, wenn an einer Stelle "beliebiger Inhalt" eingefügt werden soll, z. B. Tabellen, Grafiken, irgendwelche textliche "Prosa" ...
Zu 'ner Textmarke kommt man z. B. mit
Delphi-Quellcode:
procedure GeheZuTextmarke(aTextmarke : String);
var
vParam : OleVariant;
begin
vParam := aTextmarke;
FWordDoc.Bookmarks.Item(vParam).Select;
end;
Text bekommt man an die so "gewählte Stelle" mit
Delphi-Quellcode:
procedure SchreibeText(aText : String);
begin
FWordDoc.Selection.TypeText(aText);
end;
Den Aufruf dieser Methoden kann man dann beliebig wiederholen. Der Text wird jeweils an der Cursorposition im Worddokument eingefügt. Natürlich könnte man dort jetzt auch 'ne Tabelle aus 'ner Datenbanbkabfrage einfügen.
Will man die Formatierung des Textes ändern, ginge das in etwa so:
Delphi-Quellcode:
procedure FormatSetzen(aFormat : String);
var
vParam : OleVariant;
begin
vParam := aFormat;
WordApplication.Selection.Set_Style(vParam);
end;
aFormat muss halt nur der Name einer Formatvorlage sein, die aus Wordsicht bei der Arbeit in der gewählten Dokumentenvorlage verfügbar ist.
Eigentlich hat man da unendliche Freiheiten aus Programmsicht und auch der Kunde hat, wenn er sich an ein paar Vorgaben bezüglich der Textmarken, Formularfelder ... hält, annähernd "Narrenfreiheit".
Auf diese Weise hab' ich schonmal recht individuelle Rezeptbücher aus Datenbankinhalten erstellt. Select auf die Rezepte, die man haben möchte. Vorlage auswählen und Formularfelder für den Buchtitel befüllen. Dann zur Textmarke für das erste Rezept gehen. Rezeptnamen ausgeben. Bild mit fertig angerichtetem Rezept ausgeben. Tabelle mit den Rezeptzutaten. Und dann als Liste die einzelnen Verarbeitungsschritt. Anschließend noch 'ne Nährwerttabelle, ein Seitenwechsel und das nächste Rezept.
Wenn man für den Rezeptnamen eine Überschriftsformatierung wählt, kann man auch von Word automatisch ein Inhaltsverzeichnis generieren lassen.
Funktioniert mit Strickanleitungen, Kurzgeschichten ... natürlich ebenso flexibel. Und selbstverständlich auch mit Geschäftsbriefen, Reports ...