Ich hab's ausprobiert, es hat zunächst mal nicht geklappt. Sobald das Dokument aus der Dokumentenvorlage erzeugt wird, wird der Titel (und damit der vorgeschlagene Dateiname) aus dem Titel der Vorlage bzw. (falls der Titel leer ist) aus der ersten Zeile im Text übernommen wird. Ich müsste also in der DOT den Titel entsprechend einstellen, eine Kopie der DOT speichern und aus dieser Kopie mein Dokument erzeugen. Das funktioniert zwar, ist aber reichlich umständlich. Aber wenn es nicht anders geht, mache ich es so.
Inzwischen habe ich im Netz einen
interessanten Hinweis zu diesem Thema gefunden. Als VBA-Makro funktioniert das zwar, aber die Umsetzung in Delphi bringt mir immer die Fehlermeldung "'Item' ist keine Eigenschaft". Hier ist mein Code dazu:
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| procedure TForm2.CreateWordDocument; var WinWord : Variant; Dialog : Variant; Cursor : TCursor; const wdDialogFileSummaryInfo = 86; begin if not FileExists(DotName) then begin ShowMessage('DOT file "'+DotName+'" not found.'); Exit; end;
Cursor := Screen.Cursor; try Screen.Cursor := crHourglass;
try WinWord := GetActiveOleObject('Word.Application'); except try WinWord := CreateOleObject('Word.Application'); except ShowMessage('Microsoft Word can not be launched.'); Exit; end; end;
WinWord.Visible := true; WinWord.Documents.Add(Template:= DotName, NewTemplate:=False, DocumentType:=0);
Dialog := WinWord.Application.Dialogs[wdDialogFileSummaryInfo]; Dialog.Title := 'vorgeschlagener Dateiname'; Dialog.Execute; Dialog := unassigned;
finally Screen.Cursor := Cursor; WinWord := unassigned; end; end; |
Langsam taste ich mich schon an die Lösung ran. Zwei Notlösungen hab ich schon: Die temporäre DOT, oder ein VBA-Makro in der DOT. Beides funktioniert, aber so richtig sauber ist beides nicht.
@wwwDirk und Hathor: Ohne Eure Hilfe wäre ich aber nicht mal so weit gekommen, vielen Dank dafür.