Du willst also weder eine Vorlage öffnen, noch ein Dokument, sondern ein neues Dokument (anhand einer Vorlage) erstellen.
Das solltest Du auch so schreiben und Dir auch darüber klar werden, dass Du genau das möchtest.
Also ungefähr sowas:
Delphi-Quellcode:
function NeuesDokument(aWordApp : TWordApplication; aWordDoc : TWordDocument; aDot :
String; aVisible : Boolean = false) : Boolean;
var
vDOT : OleVariant;
vNewDOT : OleVariant;
vDocType : OleVariant;
vVisible : OleVariant;
begin
vDOT := aDot;
// Das ist die Vorlage, anhand der ein neues Doukment erstellt werden soll.
vNewDOT := False;
// Wir wollen keine neue Vorlage erstellen, deshalb False.
vVisible := aVisible;
// Word soll das Ganze sichtbar machen.
vDocType := EmptyParam;
// Der Parameter muss angegeben werden, soll aber leer sein.
try
aWordApp.Documents.Add(vDOT, vNewDOT, vDocType, vVisible);
aWordDoc.ConnectTo(aWordApp.ActiveDocument);
aWordApp.ActiveWindow.ActivePane.View.type_ := wdOutlineView;
Result := True;
except
on e :
Exception do begin
Result := False;
MessageDlg(e.
Message,mtError,[mbOk],0);
end;
end;
end;
Wenn es unbedingt ShellExcecute sein muss, schau Dir mal die Kommandozeilenparameter an:
https://support.office.com/en-us/art...5-441737deb3a6
Und dann hoffe darauf, dass sie bei anderen Officeversionen (OpenOffice ...) entsprechend implementiert sind.
Denn ShellExecute und Open startet das Officepaket, dass in der Registry (für den übergebenen Dateityp) eingetragen ist (und das muss nicht das Office von MS sein).
Bei unterschiedlichen Officeversionen von MS mag das problemlos gehen, bei der Unterstützung unterschiedlicher Officepakete unterschiedlicher Hersteller, könnte es sportlich werden.
CreateOleObject('Word.Application')
nimmt das MS-Officepaket, das installiert ist. Das ist beim Wechsel der Officeversion für Dein Programm transparent. Solange an der Schnittstelle (MS-seitig) nix geändert wird, kann Dir die Officeversion auf dem "Zielrechner" (beim Kunden ...) egal sein.