Hallo Delphi-Gemeinde,
ich habe folgendes Problem:
Über OLE wird ein Word-Dokument erzeugt und ggf. Mergefelder ausgefüllt.
Delphi-Quelltext
1: 2:
| ole.activeDocument.Sections.Item(sc).Headers.Item(hd).Range.Fields.Item(fd).Result.Text := s ; |
Das klappt soweit gut, aber die Datenquelle steht nicht permanent zur Verfügung, weshalb die Mergefields ihren Inhalt verlieren, wenn das Dokument erneut angefasst wird.
Also müssen die Mergefields nicht ausgefüllt, sondern gegen den Text ersetzt werden.
In Word Basic habe ich mangels tiefere Kenntnisse folgenden Ablauf realisiert:
Quelltext
1: 2: 3:
| // m, o und n entspringen aus einer Schleife; s$ ist der einzufügende Text ActiveDocument.Sections(m).Headers(o).Range.Fields(n).Delete WordBasic.Insert s$ |
Das arbeitet perfekt.
Nun will ich den Vorgang in OLE umsetzen:
Delphi-Quelltext
1: 2:
| ole.activeDocument.Sections.Item(sc).Headers.Item(hd).Range.Fields.Item(fd).Delete ; ole.WordBasic.Insert(s); |
Ergebnis: Das angeforderte Element (wohl WordBasic) ist nicht in der Sammlung enthalten.
Ich habs schon mit TypeText versucht, konnte den korrekten Syntax aber nicht herausfinden. Aber das müsste doch ein Ansatz sein?
Dann habe ich mir überlegt, ob man das Mergefield einfach markiert, entfernt und den Text schreibt:
Delphi-Quelltext
1: 2:
| ole.activeDocument.Sections.Item(sc).Headers.Item(hd).Range.Fields.Item(fd).Select ; ole.Selection.Text := s ; |
Ergebnis: Die Methode Selection wird vom Automatisierungsobjekt nicht unterstützt
Auch ole.activeDocument.Selection geht nicht
Ich hatte auch schon die Meldung das dies nur im Seiten-Layout möglich sei etc.
Offenbar komme ich mit der objektorientierten MS-Welt nicht so richtig klar, kann mir jemand einen Tipp geben?
Danke.