Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:55
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.
  Mit Zitat antworten Zitat